PHP模拟发送POST请求之二、用PHP和JS处理URL信息
明白了HTTP请求的头信息后,我们还需要对请求地址有所了解。再者,HTTP GET请求是靠URL实现的,所以了解URL的构造,处理URL的重要性不言而喻。
在PHP中我们用parse_url()函数来处理URL信息。
其函数原型如下:
array parse_url ( string $url [,URL_COSTANT])
本函数解析一个 URL 并返回一个关联数组,包含在 URL 中出现的各种组成部分。
对严重不合格的 URL,parse_url() 可能会返回 FALSE 并发出 E_WARNING。否则会返回一个关联数组,其组成部分为(至少有一个)
其正确的返回值如下:
scheme http 协议信息 host 主机信息 port 端口号 user 用户名 pass 密码 path 站内路径 query 在问号 ? 之后的查询信息 fragment 在散列符号 # 之后 锚点信息 Hash信息
下面是一个典型的URL字符串,我们对其用parse_url()解析,并输出其结果数组。
$url='https://zbs:mypass@www.baidu.com:8080/home/index.html?gender=male&write=code#anchor'; $arr=parse_url($url); array (size=8) 'scheme' => string 'https' 'host' => string 'www.baidu.com' 'port' => int 8080 'user' => string 'zbs' 'pass' => string 'mypass' 'path' => string '/home/index.html' 'query' => string 'gender=male&write=code' 'fragment' => string 'anchor'
另外,我们还可以对第二个参数赋值,指定要返回的URL部分,对应的URL_CONST取值如下:
scheme:PHP_URL_SCHEME,
host:PHP_URL_HOST,
port:PHP_URL_PORT,
user:PHP_URL_USER,
pass:PHP_URL_PASS,
path:PHP_URL_PATH,
query:PHP_URL_QUERY,
fragment:PHP_URL_FRAGMENT.
例如我们要指定返回地址的查询字段信息:
$url='https://zbs:mypass@www.baidu.com:8080/home/index.html?gender=male&write=code#anchor'; $arr=parse_url($url,PHP_URL_QUERY);//string '/home/index.html
理解了如何拆分URL信息后,我们也更需要学会拼合URL信息,拼合URL信息有一个专门的函数http_build_url(),但此函数因其处理繁琐,一般较少使用,我们常用字符串来拼合URL,在处理较多的查询信息(query_string)时,我们会用http_build_query()函数。
http_build_query()函数能帮我们将一个关联数组快速拼合成一个查询字符串,它甚至可以将一个对象分析拼合为一个查询字符串,但要注意,它只能保留修饰符为"public"的"属性",其余信息将会被舍弃。
例:
$info=['run'=>'10km','eat'=>'3kg']; var_dump(http_build_query($info));//string 'run=10km&eat=3kg' class Msg{ public $attr_public="value_public"; protected $attr_protected="value_protected"; private $attr_private="value_private"; function foo(){ echo "foo"; } } $msg=new Msg(); var_dump(http_build_query($msg));//string 'attr_public=value_public'
另:JS获取当前url信息:
Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问,它包含了有关当前 URL 的信息。
Location 对象属性
属性 描述
hash URL锚点信息
host 主机名和当前 URL 的端口号
hostname 当前URL的主机名
href 完整的URL
pathname 当前URL的路径部分
port 当前URL的端口号
protocol 当前URL的协议
search 查询字符串