使用PHP Curl,我如何准确查看发送的内容?

时间:2009-12-15 17:39:54

标签: php http rest curl

例如,在以下CURL片段中:

  $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url); //set target URL
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);// allow redirects
    curl_setopt($ch, CURLOPT_POST, $usePost); // set POST method
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //set headers
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, $returnHeaders); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //prevent unverified SSL error

在我运行curl_exec之前,如果我想在发送之前查看完整的请求标题和正文,该怎么办? (看看是否正确遵循某些REST API指南)

2 个答案:

答案 0 :(得分:1)

您可以向本地服务器发送请求:

$test_url = 'http://localhost/nonexistent-page';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $test_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
// Other options.
curl_exec($ch);

echo nl2br(curl_getinfo($ch, CURLINFO_HEADER_OUT));

这将为您提供请求标头,只有请求行路径和Host:行与您的实际请求不同。

答案 1 :(得分:0)

如果您可以访问服务器上的图形环境,则可以使用Wireshark检查正在发送和接收的网络数据包。 Wireshark允许您使用过滤器来过滤掉特定的IP地址和协议。

例如,我使用此过滤器来查看来自我的cURL请求/响应的所有流量,其中包含IP w.x.y.z(替换为您要连接的服务器的IP):

ip.addr == w.x.y.z && http

然后,我可以检查所有请求回复。 这让我非常了解“幕后发生的事情”。