1)如何获取 客户端请求的头部
参考网站:
http://www.neatstudio.com/show-377-1.shtml
PHP中一般采用getallheaders来获取头部,但事实上,有些模式下是获取不到的(以前真没有注意过在fastcgi下这个函数不能用,当然我现在也没有测试。是老王说的)
他说:
在PHP里,想要得到所有的HTTP请求头,可以使用getallheaders方法,不过此方法并不是在任何环境下都存在,比如说,你使用fastcgi方式运行PHP的话,就没有这个方法,所以说我们还需要考虑别的方法,幸运的是$_SERVER里有我们想要的东西,它里面键名以HTTP_开头的就是HTTP请求头:$headers = array();
foreach ($_SERVER as $key => $value) {
if ('HTTP_' == substr($key, 0, 5)) {
$headers[str_replace('_', '-', substr($key, 5))] = $value;
}
}
代码很简单,需要说明的是RFC里明确指出了信息头的名字是不区分大小写的。
2)如果php脚本作为http客户端,用curl去请求远端 服务器,那么如何获取 http响应消息 的应答头!
代码如下:
<?php
$xml = <<<'EOF'
<?xml version="1.0" encoding="UTF-8" ?>
<body>
<keyword>3333</keyword>
<order>0</order>
<pagesize>10</pagesize>
<pagenum>1</pagenum>
<corporation_id>3398351028</corporation_id>
</body>
EOF;
$PublicAccountServerIP = "218.205.81.33";
$header[]="Host: $PublicAccountServerIP";
$header[]="Accept-Encoding: gzip";
$header[]="Content-Type: text/xml";
//自定义头部--start
$header[]="msgname: getpubliclist";
$header[]="version: 1.0.0";
$header[]="userid: +8618867101652_3398351028@li726-26";
$header[]="AuthType:httpdigest";
//自定义头部--end
$header[]="Content-Length: ".strlen($xml);
$url = "http://$PublicAccountServerIP/padata/eclient/msg";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_HEADER, 0); #必须把应答头开启
curl_setopt($ch, CURLOPT_HEADER, 1); #头部有result: 000000 字段,表示应答请求信息,参考接口说明
$ret = curl_exec($ch);
$headSize = curl_getinfo($ch,CURLINFO_HEADER_SIZE); #获取头部数据大小,此项必须增加进来
curl_close($ch);
$strHead = substr($ret,0,$headSize-2); # \r\n多余
$strBody = substr($ret,$headSize);
echo $strHead;
echo "\r\n";
echo $strBody;
echo "\r\n";
echo getHttpField($strHead,'result');
//获取http请求头部的某个头域的值
function getHttpField($strHead,$strField){
if(!$strHead || !$strField){return null;}
$arr = explode("\r\n",$strHead);
foreach($arr AS $v){
$pos = strpos($v,':');
if($pos){
$field = substr($v,0,$pos);
$value = trim(substr($v,$pos+1));
if( $field == $strField){
return $value;
}
}
}
return null;
}
?>
重要说明: