You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CURL从API响应头中获取认证会话值?

问题分析与解决方案

核心问题

  1. 回调函数参数错误:CURLOPT_HEADERFUNCTION的回调函数签名应为function($curl, $header_line),你错误地将第二个参数命名为$Auth,且未引用外部的$Auth数组,导致外部$Auth始终为空。
  2. 逻辑混淆:你在回调里把头部内容存入$response_headers,但最后却尝试访问空的$Auth数组,自然触发"Undefined array key 0"警告。

修正后的代码

$init = curl_init();

// 用于存储目标认证头的值
$Auth = [];

$header_callback = function($curl, $header_line) use (&$Auth) {
    // 去除每行头信息末尾的换行符与空白
    $header_line = trim($header_line);
    
    // 替换成你实际要获取的响应头名称(比如"Authorization:"或自定义头)
    $target_header = 'Auth-Token:';
    if (strpos($header_line, $target_header) === 0) {
        // 提取头信息的值,去掉前缀与多余空格
        $header_value = trim(substr($header_line, strlen($target_header)));
        $Auth[] = $header_value;
    }
    
    // 必须返回当前行的长度,否则curl会终止请求
    return strlen($header_line);
};

curl_setopt_array($init, [
    CURLOPT_URL => 'http://ip-api/v1/rest/auth',
    CURLOPT_HEADER => false, // 无需让响应头混入响应体,由回调单独处理
    CURLOPT_HEADERFUNCTION => $header_callback,
    CURLOPT_RETURNTRANSFER => true, // 让curl_exec返回响应体而非直接输出
    // 若API要求POST请求,需添加CURLOPT_POST、CURLOPT_POSTFIELDS等参数
]);

$output = curl_exec($init);

// 检查curl请求是否出错
if(curl_errno($init)){
    echo '请求错误: ' . curl_error($init);
}

// 输出提取到的认证头
var_dump($Auth);
if(!empty($Auth)){
    echo $Auth[0];
}

curl_close($init);

关键修改说明

  • 修正回调函数的参数签名,并通过use (&$Auth)引用外部数组,确保头信息能存入目标变量。
  • 添加头信息过滤逻辑,可根据实际需要修改$target_header的值,精准提取你需要的响应头。
  • 增加请求错误检查,方便排查API连接或请求异常问题。

内容的提问来源于stack exchange,提问作者F-A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 05:30:47