【问题标题】:Show Curl POST Request Headers? Is there a way to do this?显示 Curl POST 请求标头?有没有办法做到这一点?
【发布时间】:2011-03-11 00:21:13
【问题描述】:

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

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

 $result = curl($curl_exect) ;

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

【问题讨论】:

标签: php curl request header libcurl


【解决方案1】:

这里就是你所需要的:

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

【讨论】:

  • 如何同时显示 POST 数据? IE。 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 添加的
  • @DanDascalescu 由于您发布了数据,因此在创建 Curl 请求时,无需将其捕获回来。注意:POST 表单值作为“表单数据”发送,而不是标题,因此上面没有显示它们。如果您确实需要查看线路上的内容,请尝试使用 WireShark。
【解决方案2】:

您可以通过以下方式查看有关转移的信息:

curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);

在请求之前,并且

$information = curl_getinfo($curl_exect);

请求之后

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

您也可以在curl_setopt 中使用CURLOPT_HEADER

curl_setopt($curl_exect, CURLOPT_HEADER, true);

$httpcode = curl_getinfo($c, CURLINFO_HTTP_CODE);

return $httpcode == 200;

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

【讨论】:

  • 我试过这个,但它只是输出了一个 POST 数组,所以它没有显示确切的标题,只有 POST,而不是接收服务器看到的那样,所以它不适合故障排除
  • 答案不完整。在请求被执行之前,你必须curl_setopt($curl_exect, CURLINFO_HEADER_OUT, true);
  • 这仅显示服务器发回的内容。好像 curl_setopt($ch,CURLOPT_VERBOSE,true);将允许您查看发送到服务器的内容。
【解决方案3】:

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

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

【讨论】:

    【解决方案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);
    

    就像写在how make request上的一样

    【讨论】:

    • 感谢您的帖子,我想我没有完全理解这是一个与 curl 不同的库,对吧?有没有办法只用 curl 来做到这一点?如果没有,我会考虑这样做,只是我不熟悉 fputs
    • 这其实是php的原生功能
    • 这是一个很酷的答案,因为它暴露了某种原始请求。我一直被教导使用 cURL,这是一个有时必须安装但并不总是可用的库。
    【解决方案5】:

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

    【讨论】:

    • WireShark 在 WinCap 或其他捕获系统上运行,你必须有一个基于 atheros 的芯片组才能工作和文件名,然后查看标题和数据。
    • 我尝试了 wireshark,但它似乎没有接收到我传出的 Curl POST 流量
    • 我以为你在本地服务器上工作,是这样吗?
    • 罗伯特,我正在尝试按照您在 Chrome 中所说的操作,但是当我执行 Ctrl+Shift+3 时它什么也没做,我正在搜索这方面的信息,但似乎无法找到相关的东西,这是访问 chrome 的什么功能?谢谢
    • 好的,我发现这个关于在 Chrome 中查看标题:google.com/support/forum/p/Chrome/… 我相信它的 Ctrl+Shift+i 可以访问这个
    猜你喜欢
    • 2021-07-09
    • 2013-08-03
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 2011-05-05
    • 2011-06-09
    • 2015-02-24
    相关资源
    最近更新 更多