Skip to content

调用 OpenAI 兼容 API 时报 401 Unauthorized 怎么办

先用一条命令定位

执行以下命令测试:

bash
curl -sS -i https://api.treenew.online/v1/chat/completions \
  -H "Authorization: Bearer 你的令牌" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-5.6-luna","messages":[{"role":"user","content":"hi"}],"max_tokens":1}'

max_tokens: 1 是刻意的:这条命令只为验证鉴权,不需要模型真的生成内容,消耗可以忽略。

怎么看结果

  • 返回 HTTP 401 —— 问题在 Key 或 Authorization 请求头本身,与你的客户端无关,往下看「逐项排查」。
  • 返回 HTTP 200 —— Key 是好的,问题出在客户端配置(地址填错、Key 没保存上、被别处的环境变量覆盖等)。
  • 返回 404 且提示模型不存在 —— 鉴权其实已经通过了,那是另一个问题,见模型不存在

先跑这一条,能省掉大半排查时间。

逐项排查

  • Bearer 前缀缺失或错误:检查请求头是否严格为 Authorization: Bearer sk-xxx,排除漏前缀、写成 bearer 或 Basic。
  • Key 首尾混入空格或换行:从控制台复制 Key 后执行 trim 操作,去除首尾空白字符。
  • 使用登录密码而非令牌:确认 Key 来自 https://api.treenew.online 「令牌」页创建,而非账号登录密码。
  • 令牌被删/过期/禁用:登录控制台检查令牌状态,额度耗尽可能导致令牌被禁用。
  • 令牌 IP 或模型白名单不匹配:检查令牌绑定设置,确保当前 IP 和请求模型符合白名单。
  • Key 填入 Base URL 等错位置:Base URL 必须固定为 https://api.treenew.online/v1,Key 仅填 Authorization 头。
  • 客户端 Key 存储位置导致修改未生效:修改 Key 后重启客户端,检查环境变量或缓存是否覆盖新值。

401 与 403 的区别

401 表示认证信息无效或缺失;403 表示认证已通过但无访问权限。两者排查方向不同。

还是不行

收集脱敏后的请求头(隐藏 Key 值)、请求时间点、令牌名称进行反馈。

相关