2010-06-16 34 views
5

我正在使用cURL脚本通过代理向脚本发送POST数据,我想查看cURL脚本发送的原始HTTP标头。我试过的东西列表:如何使用PHP脚本记录原始HTTP标头?

  • echo curl_getinfo($ch, CURLINFO_HEADER_OUT)没有输出。
  • file_get_contents('php://input')获取一些HTTP标头,但不是全部。
  • print_r($_SERVER)也得到了一些HTTP头但不是所有(我知道这是因为应该有一个X - 转发,对于头并没有)
  • 打印所有超全局($ _ POST,$ _GET,$ _REQUEST,$ _FILES等)仍然不显示原始的HTTP头。
  • http_get_request_headers(),apache_request_headers(),$http_response_header,$HTTP_RAW_POST_DATA不输出所有东西。

帮助?

回答

1

您还需要设置CURLINFO_HEADER_OUT选项:

CURLINFO_HEADER_OUT
TRUE跟踪 手柄的请求字符串。
可用 自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); 
+1

@php:啊,所以你实际上想知道代理发送的是什么,而不是卷发发送的内容。您可能需要将其记录在代理本身或远程服务器上。 curl不知道你的代理添加了什么头文件 – 2010-06-16 15:04:18

0

如果您运行的Apache的一个模块,然后apache_request_headers()做你需要什么。

对于任何其他体系结构,您只能选择记录在$ _SERVER中的内容,或者您​​需要找到一些方法来使用Web服务器配置记录信息。

+2

你一定是C的粉丝。 – Pacerier 2014-12-11 09:47:39

3

打开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 **/ 
} 
+0

这基本上是正确的,除了你应该使用explode而不是split,并且它没有考虑多个头文件(比如301/302重定向) – cwd 2011-10-17 04:26:54