调用Powerbike API时cURL请求返回401 Unauthorized问题求助
问题分析与修正
你的代码里最关键的错误是Basic认证的格式完全错误,这直接导致服务器返回401未授权。
错误点详解
你当前的代码是把Basic 用户名:密码这个完整字符串做base64编码:
$usernamePassword = 'Basic '.$username.':'.$password; $basic = base64_encode($usernamePassword);
但HTTP Basic认证的正确规则是:
- 先把
用户名:密码拼接成字符串 - 对这个字符串做base64编码
- 最后在编码结果前加上
Basic作为Authorization头的值
修正后的代码
把认证部分改成下面这样,同时去掉多余的POST登录请求(Basic认证不需要提前登录,每个请求带正确头即可):
$username = 'username'; $password = 'password'; // 正确的Basic Auth生成方式 $authString = base64_encode("$username:$password"); $authHeader = "Basic $authString"; $ch = curl_init(); // 直接请求分类接口,带上正确的认证头 curl_setopt($ch, CURLOPT_URL, 'https://api.powerbike.pl/xml/product/categories'); curl_setopt($ch, CURLOPT_HTTPHEADER, array( "content-type: application/xml; charset=UTF-8", "Authorization: $authHeader" )); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, true); $content = curl_exec($ch); // 可以加个错误排查,看看具体响应 if(curl_errno($ch)){ echo 'CURL错误:'.curl_error($ch); } curl_close($ch); // 输出结果看看 var_dump($content);
额外提示
如果API确实需要先POST登录获取会话,那你需要先确认登录接口的正确参数和响应(比如是否返回Cookie),然后在后续请求中带上会话Cookie。但从你当前的错误来看,核心问题还是Basic认证的格式错误,先修正这个再测试。
内容的提问来源于stack exchange,提问作者Lendzmianos
相关产品推荐
相关产品推荐

