PHP中带Authorization Token的Curl GET请求无法正常工作问题
错误根源
返回的错误value pair (missing equal-sign) in Authorization header表明服务器解析Authorization请求头时,判定格式不符合规范。结合你的代码来看,核心问题大概率是**$responseDecode->access_token为空或未正确获取到有效Token**,导致最终生成的Authorization头变成Authorization: Bearer (Bearer后无Token内容),服务器无法识别这种格式。
另外,从curl_getinfo结果中看到size_upload=127,GET请求通常不会产生上传内容,这可能是代码残留了POST相关设置,但并非当前错误的核心诱因。
排查与修复步骤
验证Token的有效性
在构造请求头之前,先输出$responseDecode变量,确认access_token字段存在且有有效值:var_dump($responseDecode); exit;若
$responseDecode是数组而非对象(比如之前用json_decode($resp, true)解析),则需改为$responseDecode['access_token']。构造合规的Authorization头
确认Token有效后,再构造请求头,同时增加空值判断与格式处理:if (empty($responseDecode->access_token)) { die("未获取到有效访问Token"); } $headers = array( "Content-Type: application/json; charset=utf-8", "Authorization: Bearer " . trim($responseDecode->access_token) );使用
trim()去除Token可能存在的首尾空格,避免格式异常。明确指定请求类型
确保当前请求为GET,避免意外的POST设置干扰:curl_setopt($ch, CURLOPT_POST, false);调试实际发送的请求头
开启curl的请求头调试,查看真实发送的Authorization头是否符合Bearer <token>格式:curl_setopt($ch, CURLINFO_HEADER_OUT, true); // 执行请求后打印请求头 $requestHeader = curl_getinfo($ch, CURLINFO_HEADER_OUT); echo "实际请求头:" . $requestHeader;
修复后的完整代码示例
<?php // 确保已正确获取并解析Token(此处假设前置获取Token逻辑已完成) if (empty($responseDecode->access_token)) { die("未获取到有效访问Token"); } $headers = array( "Content-Type: application/json; charset=utf-8", "Authorization: Bearer " . trim($responseDecode->access_token) ); $xurl = 'https://test.api.us2.abc.com/oauth/api/reg/number/'; $query = http_build_query([ 'numId' => 10000 ]); $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $xurl . '?' . $query); // 修正URL拼接,避免重复的? curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_POST, false); // 明确指定GET请求 // 可选:开启请求头调试 // curl_setopt($ch, CURLINFO_HEADER_OUT, true); $resp = curl_exec($ch); // 可选:打印请求头 // $requestHeader = curl_getinfo($ch, CURLINFO_HEADER_OUT); // echo "实际请求头:" . $requestHeader; $respArray = json_decode($resp); print_r($respArray); curl_close($ch); // 关闭curl资源 ?>
内容的提问来源于stack exchange,提问作者userdev2222

