【问题标题】:Send custom HTTP headers AND get response header - curl发送自定义 HTTP 标头并获取响应标头 - curl
【发布时间】:2016-05-27 02:16:44
【问题描述】:

我正在尝试(在 PHP 中)卷曲 URL 并在请求中发送自定义标头。但是我还需要能够查看返回的响应标头。我正在查询一个我无法控制的外部 API。

我尝试过同时使用 CURLOPT_HTTPHEADER 和 CURLOPT_HEADER 选项,但它们似乎不能很好地协同工作。 CURLOPT_HEADER 似乎覆盖了请求标头,因此我无法验证我的请求,但我可以查看响应中的标头。如果我取出 CURLOPT_HEADER,我可以成功验证,但无法查看标题。

PHP 代码:

$url = "http://url-goes-here";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT ,0);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$headers = array("X-Auth-Token: $token");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HEADER, 1);
$out = curl_exec($ch);
curl_close($ch);

【问题讨论】:

    标签: php curl


    【解决方案1】:

    根据documentation,它必须是

    curl_setopt($ch, CURLOPT_HEADER, 1); // or TRUE
    

    而不是

    curl_setopt($ch, CURLOPT_HEADER, $headers);
    

    编辑:我必须说我无法复制这个问题。我创建了两个脚本:a.php(使用您的内容,将 $url 更改为 'http://localhost/b.php')和 b.php(由 a.php 查询),其中包含:

    <?php
    foreach (getallheaders() as $name => $value) {
        echo "$name: $value\n";
    }
    

    所以当我运行php a.php 时,我得到了这个:

    HTTP/1.1 200 OK
    Date: Tue, 16 Feb 2016 02:42:45 GMT
    Server: Apache/2.4.10 (Fedora) PHP/5.6.15
    X-Powered-By: PHP/5.6.15
    Content-Length: 50
    Content-Type: text/html; charset=UTF-8
    
    Host: localhost
    Accept: */*
    X-Auth-Token: xxx
    

    这意味着我 1) 成功获取了响应标头,并且 2) 也从 a.php 成功接收了它们。我建议您尝试类似的方法,看看您的网络服务器(或您的应用程序)是否在欺骗您。

    【讨论】:

    • 您是否尝试过设置 CURLOPT_HEADER 之前 $headers 被初始化并传递给 curl? (在黑暗中拍摄,但如果不查看您的脚本和远程端点发送和接收的内容,很难调试。)
    • 试过了,但也没用。您还想知道什么来帮助调试问题?目前我得到一个 401 Unauthorized 响应头,因为令牌没有在头中正确发送。
    • 您的编辑看起来更像是您编写了 b.php 以将标头回显到 b.php 文件的正文中?我正在尝试直接查看已设置的标题,这与正文不同。
    • 当我运行php a.php 时,我得到了 2 组标题:我从服务器获得的那些(在新换行符之前列出,即通过将 CURLOPT_HEADER 设置为 1 获得的那些)和那些我从 b.php 中的 a.php 收到的(即我通过 CURLOPT_HTTPHEADERS 设置的那些)。
    猜你喜欢
    • 2016-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多