如何使用PHP脚本记录原始HTTP标头?

时间:2010-06-16 14:39:49

标签: php http header

我正在使用cURL脚本通过代理将POST数据发送到脚本,我想查看cURL脚本发送的原始HTTP头。我尝试过的事情清单:

  • echo curl_getinfo($ch, CURLINFO_HEADER_OUT)没有输出。
  • file_get_contents('php://input')获取一些HTTP标头,但不是全部。
  • print_r($_SERVER)也会获得一些HTTP标头,但不是全部(我知道这是因为应该有一个X-Forwarded-For标头但没有)
  • 打印所有超级全局($ _POST,$ _GET,$ _REQUEST,$ _FILES等)仍然不显示原始HTTP标头。
  • http_get_request_headers()apache_request_headers()$http_response_header$HTTP_RAW_POST_DATA未输出所有内容。

帮助?

3 个答案:

答案 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服务器配置记录信息。