我正在使用cURL脚本通过代理将POST数据发送到脚本,我想查看cURL脚本发送的原始HTTP头。我尝试过的事情清单:
echo curl_getinfo($ch, CURLINFO_HEADER_OUT)
没有输出。file_get_contents('php://input')
获取一些HTTP标头,但不是全部。print_r($_SERVER)
也会获得一些HTTP标头,但不是全部(我知道这是因为应该有一个X-Forwarded-For标头但没有)http_get_request_headers()
,apache_request_headers()
,$http_response_header
,$HTTP_RAW_POST_DATA
未输出所有内容。帮助?
答案 0 :(得分:2)
打开CURLOPT_HEADER,而不是CURLINFO_HEADER_OUT,然后拆分\ r \ n \ r \ n(标题结束的位置),最大拆分计数为2:
<?php
$ch = curl_init('http://www.yahoo.com/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$result = curl_exec($ch);
if ($result !== false) {
$split_result = split("\r\n\r\n", $result, 2);
$header = $split_result[0];
$body = $split_result[1];
/** Process here **/
} else {
/** Error handling here **/
}
答案 1 :(得分:1)
您还需要设置CURLINFO_HEADER_OUT
选项:
CURLINFO_HEADER_OUT
正确跟踪 handle的请求字符串。
可得到 自PHP 5.1.3起。 CURLINFO_前缀 是故意的。
http://www.php.net/manual/en/function.curl-setopt.php
以下作品:
<?php
$ch = curl_init('http://www.google.com');
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HEADER_OUT);
答案 2 :(得分:0)
如果您在Apache上作为模块运行,那么apache_request_headers()可以满足您的需求。
对于任何其他架构,您只能选择$ _SERVER中记录的内容,或者您需要找到一些方法来使用Web服务器配置记录信息。