PHP CURL请求自定义标头[重复]

Posted

技术标签:

【中文标题】PHP CURL请求自定义标头[重复]【英文标题】:PHP CURL request custom header [duplicate] 【发布时间】:2016-12-31 11:10:35 【问题描述】:

有来自服务器的响应包含自定义标头“errcode”:

Date: Wed, 24 Aug 2016 09:06:04 GMT
errcode: 1
Server: nginx/1.8.1
Connection: keep-alive
Transfer-Encoding: chunked

401 Unauthorized

如何使用 php+CURL 获取“errcode”值?

$ch = curl_init($url);
if ($ch) 
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($ch, CURLOPT_HEADER, true);    // we want headers
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$json = curl_exec( $ch );
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 $transfer = curl_getinfo($ch);
curl_close($ch);

echo $httpcode; ?> //200,401 etc
<pre><?=print_r($transfer);?></pre> //array, no contains "errcode"

【问题讨论】:

显示你的 curl 代码,你得到的是文本响应吗? 【参考方案1】:

cURL 有一个内置功能,可以将响应的每个标头传递给回调函数。您需要使用选项CURLOPT_HEADERFUNCTION:

curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $header) 
    echo(trim($header) . PHP_EOL);
    return strlen($header);
);

或者,如果您不想使用匿名函数作为回调,您可以定义一个函数并将其名称作为字符串参数提供。该函数接受两个参数 - 第一个是 cURL 资源本身,第二个是当前标头。

NB:该函数每个标头执行一次,因此您可能希望将结果存储在某个位置,一个数组或文件中,然后在该文件中搜索errcode 标头的内容。

NB2:函数必须返回传递的标头的长度(注意return strlen($header);)。否则 cURL 会中断。

【讨论】:

谢谢!我设法将所有标题作为字符串。我如何仅获得“错误代码”?它是字符串列表中的最新版本。要翻转数组元素中的每一行,我们需要一些分隔符,但它不是。

以上是关于PHP CURL请求自定义标头[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 CURL 发送自定义标头

如何在curl中设置自定义的HTTP头

如何访问 Django Rest Framework 上的自定义 HTTP 请求标头?

对 PHP API 的 Axios GET 请求不适用于自定义标头

php curl如何设置自定义请求头和打印请求头信息

带有 pycurl 的自定义标头