【问题标题】:What on my PHP Curl call do I need to add to read a response's custom headers?我需要在 PHP Curl 调用中添加什么来读取响应自定义标头?
【发布时间】:2019-04-15 15:22:35
【问题描述】:

我尝试了几种方法来读取响应自定义标头,但都无法做到。我知道我得到的响应是由 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 ) );

【问题讨论】:

  • 显示您尝试过的(在您的问题中)并描述实际结果与预期结果。
  • ok @PatrickQ 我更新了上面的代码示例
  • 你读过这些东西的文档吗?你知道CURLOPT_HEADERFUNCTION 做了什么吗?
  • @miken32 我写的回调函数应该做什么?你有示例代码吗

标签: php nginx http-headers


【解决方案1】:

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

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);
}  

【讨论】:

  • 哎呀 - 复制/粘贴了错误的描述,应该是 2 - 谢谢 miken32
  • PHP 解析错误:语法错误,第 22 行 /app/catalog-sunbutter-feed.php 中的意外 '===' (T_IS_IDENTICAL) 是代码正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2011-12-28
  • 1970-01-01
  • 2017-12-10
  • 2021-12-28
相关资源
最近更新 更多