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

Chr*_*ris 8 php curl libcurl

如何在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--
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

基于Content-Length,看起来事情进展顺利,但它确实有助于我的调试工作能够看到完整的请求.我也觉得很困难,我应该能够看到整件事; 我知道我一定错过了什么.

---编辑---

我正在寻找的是相当于这个:

curl --trace-ascii debugdump.txt http://www.example.com/
Run Code Online (Sandbox Code Playgroud)

这似乎可以在libcurl中使用CURLOPT_DEBUGFUNCTION选项,但是没有在php中实现.嘘.

小智 5

我需要做到这一点,但我需要测试与银行的沟通.

使用Fiddler2非常容易,启用HTTPS流量解密,并且cURL在这种情况下使用Fiddler2作为调试代理:

$proxy = '127.0.0.1:8888';
curl_setopt($ch, CURLOPT_PROXY, $proxy);
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
Run Code Online (Sandbox Code Playgroud)


Shi*_*Shi 2

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

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

  • 这非常有用,谢谢。在我看来,应该仍然可以从 cURL 获取有关请求的“主要 HTTP 正文”的信息。 (3认同)