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

调用Powerbike API时cURL请求返回401 Unauthorized问题求助

问题分析与修正

你的代码里最关键的错误是Basic认证的格式完全错误,这直接导致服务器返回401未授权。

错误点详解

你当前的代码是把Basic 用户名:密码这个完整字符串做base64编码:

$usernamePassword = 'Basic '.$username.':'.$password;
$basic = base64_encode($usernamePassword);

但HTTP Basic认证的正确规则是:

  1. 先把用户名:密码拼接成字符串
  2. 对这个字符串做base64编码
  3. 最后在编码结果前加上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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:35:25