查看包含 POST 数据的 cURL 请求标头

Posted

技术标签:

【中文标题】查看包含 POST 数据的 cURL 请求标头【英文标题】:View cURL request headers complete with POST data 【发布时间】:2011-10-19 11:34:30 【问题描述】:

如何使用 php 中的 libcurl 查看完整的请求标头,包括发布数据

我正在尝试模拟一个页面的发布,当从浏览器完成并在 Live HTTP Headers 中查看时,它看起来像这样:

https://###.com
POST /###/### HTTP/1.1
Host: ###.###.com
...snipped normal looking headers...
Content-Type: multipart/form-data; boundary=---------------------------28001808731060
Content-Length: 697
-----------------------------28001808731060
Content-Disposition: form-data; name="file_data"; filename="stats.csv"
Content-Type: text/csv
id,stats_id,scope_id,stat_begin,stat_end,value
61281,1,4,2011-01-01 00:00:00,2011-12-31 23:59:59,0
-----------------------------28001808731060
Content-Disposition: form-data; name="-save"
Submit
-----------------------------28001808731060--

所以我们很好地看到了我正在上传的文件,它的内容,一切都在那里。但是,当我尝试从 php(使用 CURLOPT_VERBOSECURLINFO_HEADER_OUT)发布相同的帖子时,我所有从 cURL 获取数据的尝试都显示缺少帖子数据的请求标头,如下所示:

POST /###/### HTTP/1.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Host: ###.###.com
...snipped normal-looking headers...
Content-Length: 697
Content-Type: multipart/form-data; boundary=----------------------------e90de36c15f5

根据此处的 Content-Length,看来一切进展顺利,但它确实有助于我的调试工作,以便能够看到完整的请求。我也很烦,很难,我应该能看到整个事情;我知道我一定错过了什么。

--- 编辑 ---

我正在寻找的是相当于this:

curl --trace-ascii debugdump.txt http://www.example.com/

这似乎与 libcurl 中的 CURLOPT_DEBUGFUNCTION 选项一起可用,但 不是 在 php 中实现的。嘘。

【问题讨论】:

【参考方案1】:

我确实需要这样做,但我需要测试与银行的通信。

使用 Fiddler2 极其简单,开启 HTTPS 流量解密,在这种情况下让 cURL 使用 Fiddler2 作为代理进行调试:

$proxy = '127.0.0.1:8888';
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);

【讨论】:

感谢您的信息!下次我会试试的。 没问题,您可能还需要记住将 cURL 设置为暂时接受所有证书,因为 Fiddler2 使用它自己的(为了拦截 HTTPS 流量并对其进行解密)。我相信它类似于: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);【参考方案2】:

您正在发送 multipart/formdata。我猜 cURL 基本上完全显示了 HTTP 标头。 “问题”是 multipart/formdata 由多个部分组成。这超出了“第一级 HTTP 标头”和“主要 HTTP 主体”主体的一部分。

我不了解您的环境,但您也可以使用 TCP 流量监控进行调试。为此,您可以使用Wireshark 或tcpdump - Wireshark 也可以显示由 tcpdump 创建的转储文件。

【讨论】:

这个很有用,谢谢。在我看来,应该仍然可以从 cURL 获取有关请求的“主要 HTTP 主体”的信息。

以上是关于查看包含 POST 数据的 cURL 请求标头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 的 cURL POST HTTP 请求中包含授权标头?

向服务器发送请求时,如何查看 curl 生成的请求标头?

Python请求与curl

Echo curl 请求标题和正文而不发送它?

记一次curl post请求数据被截断问题处理

记录:http接口测试必学之curl命令