显示Curl POST请求标头?有没有办法做到这一点?


87

我正在构建一个Curl Web自动化应用程序,但由于无法获得所需的POST操作结果而遇到一些问题,我在弄清楚如何显示发送的完整POST请求(带有标头)时遇到了一些麻烦,我一直在搜索此内容,但是出现的所有内容都是响应标头,实际上我也想要这些,但也需要请求,我在Google上找不到的帖子似乎都没有提到。

我知道我可以使用类似这样的方式显示curl请求的结果(原谅我,如果我的语法关闭,我已经用我的ide和代码关闭了我的虚拟机来引用

 $result = curl($curl_exect) ;

无论如何,我将非常感谢有关如何查看完整标题的任何建议,谢谢


Answers:


83

您可以通过执行以下操作查看有关转移的信息:

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);

return $httpcode == 200;

这些只是使用标题的一些方法。


4
我尝试了一下,但是它只是输出一个POST数组,因此它没有显示确切的标头,只有POST,而且与接收服务器看到的也不完全一样,因此对于故障排除不是很理想
Rick 2010年

5
答案不完整。在执行请求之前,您必须curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
naitsirch 2013年

1
这仅显示服务器发回的内容。似乎curl_setopt($ ch,CURLOPT_VERBOSE,true); 将允许您查看发送到服务器的内容。
Steven Teo

168

这就是您所需要的:

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

6
如何显示POST数据?即由curl_setopt($ ch,CURLOPT_POSTFIELDS,$ postData)添加;
Dan Dascalescu

@DanDascalescu由于您已发布数据,因此在创建Curl请求时,无需将其捕获回来。注意:POST表单值是作为“表单数据”而不是标头发送的,因此上面的内容未显示它们。如果您确实需要查看线路上的内容,请尝试WireShark。
Joseph Lust

10

您可以使用以下命令将curl发送的所有标头保存到文件中:

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

6

您可以使用以下方法自行请求标头:

// 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);

喜欢写在如何发出请求


感谢您的发布,我想我还没有完全理解它,因为它与curl是一个不同的库,对吗?有没有办法做到这一点?如果没有,我会考虑这样做,只是我对fput不熟悉
Rick 2010年

这实际上是PHP的原生功能
SSH这

1
这是一个很酷的答案,因为它公开了原始请求的种类。我总是被教导使用cURL,这是一个有时必须安装且并不总是可用的库。
Altimus Prime

2

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


2
WireShark运行在WinCap或其他捕获系统上,我认为您必须具有基于atheros的芯片组才能工作,为什么不安装chrome并按,Ctrl+Shift+J然后单击XHRButton和文件名,然后查看标题和数据。
罗伯特·皮特(RobertPitt)2010年

我尝试了Wireshark,但似乎没有收到传出的Curl POST流量
Rick 2010年

我以为您在本地服务器上工作,是这样吗?
greg0ire

罗伯特,我正在尝试执行您在Chrome中所说的操作,但是在执行Ctrl + Shift + 3时它什么也没做,我正在搜索有关此信息,但似乎找不到相关的内容,Chrome的功能这是访问吗?谢谢
Rick 2010年

好的,我发现这与在Chrome中查看标头有关:google.com/support/forum/p/Chrome/…我相信它的Ctrl + Shift + i可以访问它
Rick 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.