查看包含 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_VERBOSE
或 CURLINFO_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 请求标头的主要内容,如果未能解决你的问题,请参考以下文章