php如何通过get_headers获取远程资源的响应头信息?
发布于 作者:苏南大叔 来源:程序如此灵动~
本文描述如何通过php
的get_headers()
函数,来获得远程资源的响应头信息,重点是【响应头】。
大家好,这里是苏南大叔的网络自留地,想写啥就写啥。远程资源的响应头里面,也有隐藏的信息。所以,读取出来也是有意义的。测试环境:win10
,nginx@1.5.11
,php@7.4.29nts
。
函数说明
get_headers(string $url, int $format = 0): array
get_headers() 返回一个数组,包含有服务器响应一个 HTTP 请求所发送的标头。返回包含有服务器响应一个 HTTP 请求所发送标头的索引或关联数组,如果失败则返回 false。
- $url,目标 URL。
- $format,如果将可选的 format 参数设为 1,则 get_headers() 会解析相应的信息并设定数组的键名。
get_headers($url)
在服务器端去请求别人的资源,别人的资源也是会发送给你相关头信息的。这里使用了一个get_headers
函数。但是这个函数有个问题,默认只能获得get
请求的header
头。
$url = 'https://newsn.net/';
$result = get_headers($url);
这里需要说明的是:访问https
资源的时候,需要开启openssl
扩展。参考文章:
get_headers($url,1) 【推荐】
get_headers($url, 1)
的第二个参数,设置为1
的话,返回值就会有所不同,是解析出键名的,这个操作很奇怪。
$url = 'https://newsn.net/';
$result = get_headers($url, 1);
stream_context_set_default()
因为get_headers()
默认是使用get
进行请求的,所以,如果使用其它的method
的话,或者有附加的请求头信息的话,可以预先定义stream_context
。参考说明文档:
修改资源请求方法为head
,并自定义一些header
请求信息。测试代码如下:
stream_context_set_default(
array(
'http' => array(
'method' => 'HEAD',
'header'=>"Accept-language: zh-cn\r\n" .
"Cookie: aa=bb;cc=dd;\r\n".
'User-Agent: fake ua',
)
)
);
$url = 'http://test/test.php';
$result = get_headers($url,1);
var_dump($result);
远程服务器的测试代码,用于回显定制信息:
header("who:苏南大叔");
header("_method:".$_SERVER['REQUEST_METHOD']);
header("_cookie:".json_encode($_COOKIE,true));
header("_user-agent:".$_SERVER['HTTP_USER_AGENT']);
相关文章
总结
本文描述的是获得远程资源的头信息,更多php
经验文章,请点击:


