2010-07-02 127 views
71

我正在构建一个Curl web自动化应用程序,并且遇到了一些问题,无法获得POST动作的预期结果,我在解决如何显示完整的POST请求时遇到了一些问题(通过标题) ,我一直在寻找这个,但所有出现的是响应标题,实际上我也想要这些,但也要求,我没有发现在谷歌上的帖子似乎提到..显示卷曲POST请求标题?有没有办法做到这一点?

我知道我可以显示使用这样的事情(原谅我,如果我的语法是关闭的卷曲请求的结果,我已经关闭了我的虚拟机,我的IDE和代码来引用

$result = curl($curl_exect) ; 

反正,我将不胜感激关于如何查看完整的标题的任何建议,谢谢

+1

使用**'CURLOPT_VERBOSE' **。 – ekillaby 2012-05-15 18:09:40

+0

可能的重复:http://stackoverflow.com/questions/866946/how-can-i-see-the-request-headers-made-by-curl-when-sending-a-request-to-the-ser – 2013-01-30 22:06:35

回答

52

您可以通过执行看到有关转让的信息:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true); 

请求之前,和

$information = curl_getinfo($curl_exect); 
请求后

查看:http://www.php.net/manual/en/function.curl-getinfo.php

您还可以使用CURLOPT_HEADERcurl_setopt

curl_setopt($curl_exect, CURLOPT_HEADER, true); 

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE); 

if($httpcode == 200) { 
    return true; 
} 

return false; 

这些都只是用头的一些方法。

+4

我试过这个,但它只是输出一个POST数组,所以它没有显示确切的标题,只有POST和不完全如接收服务器会看到它,所以它不理想的故障排除 – Rick 2010-07-02 15:57:17

+4

答案不完整。在执行请求之前,您必须'curl_setopt($ curl_exect,CURLINFO_HEADER_OUT,true);' – naitsirch 2016-03-09 09:28:11

+0

这只显示服务器发回的内容。看起来像curl_setopt($ ch,CURLOPT_VERBOSE,true);将允许您查看您发送给服务器的内容。 – 2017-05-19 05:37:29

3

我最近有完全相同的问题,并且我安装了Wireshark(它是一个网络监视工具)。除了加密流量(HTTPS),您可以看到所有内容。

+2

WireShark在WinCap或其他捕获系统上运行,你必须有一个基于atheros的芯片组才能工作,我想,为什么不安装chrome并按下“Ctrl + Shift + J”,然后点击'XHR'按钮和文件名然后查看标题和数据。 – RobertPitt 2010-07-02 10:07:12

+0

我试过wireshark,但它似乎没有拿起我即将离任的卷曲POST流量 – Rick 2010-07-02 15:47:01

+0

我假设你在本地服务器上工作,是这样吗? – greg0ire 2010-07-02 16:01:46

4

你可以让你自己使用请求头:

// open a socket connection on port 80 
$fp = fsockopen($host, 80); 

// send the request headers: 
fputs($fp, "POST $path HTTP/1.1\r\n"); 
fputs($fp, "Host: $host\r\n"); 
fputs($fp, "Referer: $referer\r\n"); 
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); 
fputs($fp, "Content-length: ". strlen($data) ."\r\n"); 
fputs($fp, "Connection: close\r\n\r\n"); 
fputs($fp, $data); 

$result = ''; 
while(!feof($fp)) { 
    // receive the results of the request 
    $result .= fgets($fp, 128); 
} 

// close the socket connection: 
fclose($fp); 

像writen上how make request

+0

感谢这篇文章,我想我不完全理解这是一个不同于curl的库,对吧?有没有办法做到这一点只是卷曲?如果没有,我会考虑这样做,只是我不熟悉fputs – Rick 2010-07-02 16:11:04

+0

这实际上是php – 2012-04-18 21:31:49

142

这里是所有你需要:

curl_setopt($curlHandle, CURLINFO_HEADER_OUT, true); // enable tracking 
... // do curl request  
$headerSent = curl_getinfo($curlHandle, CURLINFO_HEADER_OUT); // request headers 
+14

的本地功能最佳答案IMO – marlar 2013-04-10 14:53:52

+6

如何显示POST数据?即通过curl_setopt($ ch,CURLOPT_POSTFIELDS,$ postData)添加; – 2013-11-20 10:09:49

+0

@DanDascalescu由于您发布了数据,因此在创建Curl请求时,无需将其捕获回来。注意:发布表单值是以“表单数据”的形式发送的,而不是标题,因此上述内容为何不显示。如果您确实需要了解线路上的情况,请尝试WireShark。 – 2013-11-20 19:31:28

8

您可以保存所有的头被卷曲发使用以下文件:

$f = fopen('request.txt', 'w'); 
curl_setopt($ch,CURLOPT_VERBOSE,true); 
curl_setopt($ch,CURLOPT_STDERR ,$f);