2016-02-16 198 views
0

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

我试过使用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); 

回答

0

按照该documentation,它必须是

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

,而不是

curl_setopt($ch, CURLOPT_HEADER, $headers); 

编辑:我必须说,我可以不要复制e问题。我创建了两个脚本: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。我建议你尝试类似的东西,看看你的Web服务器(或你的应用程序)是否与你玩弄技巧。

+0

我试过了,但仍然有同样的问题。 – user5331188

+0

在* $ headers被初始化并传入curl之前,您是否尝试设置CURLOPT_HEADER *? (在黑暗中拍摄,但没有看到脚本和远程端点发送和接收的内容,就很难调试。) –

+0

尝试过,但也没有奏效。您还想了解什么来帮助调试该问题?目前,我得到一个401未经授权的响应头,因为令牌没有在头中正确发送。 – user5331188