首页 > 解决方案 > 我需要在 PHP Curl 调用中添加什么来读取响应的自定义标头?

问题描述

我尝试了几种方法来读取响应自定义标头,但未能。我知道我得到的响应是由 nginx 提供的,并且自定义标头名称以 X-......

$endpoint =  'url here';
$ch = curl_init( $endpoint );

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'cbFunc');                                                                    


$result = curl_exec($ch);

print_r( curl_getinfo($ch ) );

标签: phpnginxhttp-headers

解决方案


PHP 手册是一个很好的参考指南,当您遇到此类问题时,它是一个很好的起点。

CURLOPT_HEADERFUNCTION [设置值] 接受五个参数的回调。

因此

log_headers('init');
$endpoint =  'url here';
$ch = curl_init( $endpoint );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);  
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'log_headers');                                                                   
$result = curl_exec($ch);
$headers=log_headers();
print_r($headers);

function log_headers($ch=false, $headers=false)
{
    static $hdrs;
    if (is_array($hrs) && $ch===$headers===false) {
        return $hdrs[];
    } elseif ($ch==='init') {
        $hdrs=array();
        return 0;
    } 
    $hdrs[]=$headers;
    return strlen($headers);
}  

推荐阅读