PHP、curl和原始标头

41
在使用PHP的curl函数时,是否有办法查看curl向服务器发送的确切的原始头信息?
4个回答

46
你可以使用 curl_getinfo
在调用之前
curl_setopt($ch, CURLINFO_HEADER_OUT, true);

之后

$headers = curl_getinfo($ch, CURLINFO_HEADER_OUT);

1
不幸的是,这并没有展示 cURL 请求的主体内容。有人知道怎样去显示它吗?显然我们将请求主体传递给了 cURL,但是为了调试目的,我想确切地看到 cURL 发送了什么。 - Chadwick Meyer
@ChadwickMeyer 我也在寻找同样的东西:如何同时显示请求头和请求体。看起来似乎不可能。 :-( - Simon East

9
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT));
?>

仅适用于PHP 5.1.3及以上版本。 http://php.net/manual/zh/function.curl-getinfo.php


您可以使用控制台并访问以下网址来验证它们是否相同:

curl http://example.com/ -I

或者

curl --trace-ascii /file.txt http://example.com/


5
据我所知,PHP/CURL绑定仍然缺乏对CURLOPT_DEBUGFUNCTION的适当支持,该函数是libcurl的回调函数,可以提供所有这些详细信息。
这就是为什么我建议人们首先使用curl命令行工具和其--trace-ascii选项来解决HTTP脚本问题,然后再将其转换为PHP函数的主要原因。

1
看起来你是对的,我稍微查了一下最新的稳定版 PHP 源代码,似乎他们使用 CURLOPT_DEBUGFUNCTION 来实现他们的 CURLINFO_HEADER_OUT 选项,但他们没有自己完全功能的 CURLOPT_DEBUGFUNCTION。顺便说一句:我记得你在 PHP curl 邮件列表中的邮件。我很惊讶你仍然有耐心做任何与 PHP 相关的 libcurl 支持 :) - Alana Storm

2
在调用`curl_getinfo`之前,务必设置`CURLINFO_HEADER_OUT`选项。
curl_setopt($c, CURLINFO_HEADER_OUT, true);

应该这样阅读: curl_setopt($c, CURLOPT_HEADER, true); - pcdinh
Janek是正确的,如果您想使用curl_getinfo()查看标头,则CURLINFO_HEADER_OUT是要设置的选项,文档在此处http://php.net/manual/en/function.curl-setopt.php。 - gawpertron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接