使用PHP cURL通过Bearer认证调用Brandfetch API报错求助
问题分析与解决
你的代码错误核心在于Brandfetch v2 API不支持Bearer认证,它采用的是AWS Signature Version 4认证方式,所以你用Authorization: Bearer $access_key的写法完全不符合要求,这才会返回那些关于Credential、Signature等参数缺失的错误。
修正方案
如果想快速实现调用,可以考虑改用Brandfetch的v1版本API,它支持直接使用API Key的Bearer认证,写法更简单:
改用v1 API的示例代码
$api_key = "你的Brandfetch API Key"; $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "https://api.brandfetch.io/v1/brands/google.com", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( "Accept: application/json", "Authorization: Bearer $api_key" // v1 API支持这种Bearer格式 ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; }
如果一定要使用v2 API,你需要实现AWS SigV4签名逻辑,这涉及以下关键步骤:
- 生成符合ISO 8601格式的当前时间字符串,用于
X-Amz-Date请求头 - 构造规范请求结构
- 基于你的Access Key生成签名密钥
- 计算请求签名
- 组装包含Credential、Signature、SignedHeaders等参数的
Authorization头
内容的提问来源于stack exchange,提问作者Eleanor Gotell
相关产品推荐
相关产品推荐

