PHP中一般采用getallheaders来获取头部,但事实上,有些模式下是获取不到的(以前真没有注意过在fastcgi下这个函数不能用)
在PHP里,想要得到所有的HTTP请求头,可以使用getallheaders方法,不过此方法并不是在任何环境下都存在,比如说,你使用fastcgi方式运行PHP的话,就没有这个方法,所以说我们还需要考虑别的方法,幸运的是$_SERVER里有我们想要的东西,它里面键名以HTTP_开头的就是HTTP请求头:
$headers = array();
foreach ($_SERVER as $key = $value) {
}
代码很简单,需要说明的是RFC里明确指出了信息头的名字是不区分大小写的.
不过并不是所有的HTTP请求头都是以HTTP_开头的的键的形式存在与$_SERVER里,比如说Authorization,Content-Length,Content-Type就不是这样,所以说为了取得所有的HTTP请求头,还需要加上下面这段代码:
if (isset($_SERVER['PHP_AUTH_DIGEST'])) {
$header['AUTHORIZATION'] = $_SERVER['PHP_AUTH_DIGEST']);
} elseif (isset($_SERVER['PHP_AUTH_USER']) isset($_SERVER['PHP_AUTH_PW'])) {
if (isset($_SERVER['CONTENT_LENGTH'])) {
$header['CONTENT-LENGTH'] = $_SERVER['CONTENT_LENGTH'];
if (isset($_SERVER['CONTENT_TYPE'])) {
$header['CONTENT-TYPE'] = $_SERVER['CONTENT_TYPE'];
一种使用fsockopen,所有的头信息全部手动连接成字符串即可.
一种使用curl,可以直接将头信息写成数组,调用curl_setopt设定头信息即可.
oCurl?=?curl_init();
//?设置请求头
$header[]?=?"Content-type:?application/x-www-form-urlencoded";
curl_setopt($oCurl,?CURLOPT_URL,?$sUrl);
curl_setopt($oCurl,?CURLOPT_HTTPHEADER,$header);
//?返回?response_header,?该选项非常重要,如果不为?true,?只会获得响应的正文
curl_setopt($oCurl,?CURLOPT_HEADER,?true);
//?是否不需要响应的正文,为了节省带宽及时间,在只需要响应头的情况下可以不要正文
curl_setopt($oCurl,?CURLOPT_NOBODY,?true);
//?使用上面定义的?ua
curl_setopt($oCurl,?CURLOPT_USERAGENT,$user_agent);
curl_setopt($oCurl,?CURLOPT_RETURNTRANSFER,?1?);
//?不用?POST?方式请求,?意思就是通过?GET?请求
curl_setopt($oCurl,?CURLOPT_POST,?false);
$sContent?=?curl_exec($oCurl);
//?获得响应结果里的:头大小
$headerSize?=?curl_getinfo($oCurl,?CURLINFO_HEADER_SIZE);
//?根据头大小去获取头信息内容
$header?=?substr($sContent,?0,?$headerSize);
curl_close($oCurl);
PHP
ob_start();
var_dump(apache_request_headers());
//服务器是apache的话?(我没试过别的服务器能否用)
http_get_request_headers()//需安装?pecl_http?扩展
以上就是土嘎嘎小编为大家整理的关于php的头信息相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!