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

PHP cURL调用API遇Bearer授权拒绝问题求助

问题根源:请求头设置错误

你的PHP cURL代码里有两个关键错误,直接导致了授权失败:


1. 请求头的格式处理完全错误

CURLOPT_HTTPHEADER 需要接收一个字符串数组,每个元素是完整的请求头(格式为 Key: Value),但你用了 http_build_query() 来处理这个数组——这个函数是用来把数组转成URL编码的表单数据的,根本不适合处理请求头。这么做会让你的请求头变成一团URL编码后的字符串,服务器完全无法识别。

2. Authorization头缺少Bearer 前缀

API要求的认证头格式是 Authorization: Bearer {tokenID},但你直接把$token赋值给Authorization字段,没有加上Bearer 这个必填前缀,服务器自然认不出这是有效的Bearer Token认证。


修正后的完整代码

把请求头的设置改成下面这样,同时确保你的$token变量只包含纯token值(不需要提前加Bearer):

$body = array( 
    "id" => $uuid, 
    "userAccountId" => $userAccountId, 
    "email" => $email, 
    "first_name" => $first_name, 
    "last_name" => $last_name, 
    "phone" => $phone, 
); 

$ch = curl_init(); 

// 正确设置请求头:数组格式,每个元素是完整的头字符串
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $token,
    'Content-Type: application/x-www-form-urlencoded' // 可选,但和http_build_query的格式对应更规范
)); 

curl_setopt($ch, CURLOPT_URL, $myurl); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($body)); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

$result = curl_exec($ch); 

// 建议加上错误排查代码,方便后续调试
if(curl_errno($ch)){
    echo 'Curl error: ' . curl_error($ch);
}

curl_close($ch); 
$result = json_decode($result); 

额外调试建议

如果还是有问题,可以用curl_getinfo($ch)打印请求的详细信息,对比Postman的请求头,看看是否还有差异:

var_dump(curl_getinfo($ch));

这样就能确保你的请求头和Postman完全一致,解决授权问题。

内容的提问来源于stack exchange,提问作者handkock

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:03:43