知识库

Claude Code 连不上 API:6 个报错串对照排查

TL;DR

  • 连不上先分三层:网络层(地址/协议)、鉴权层(Key 与变量名)、模型层(模型名映射)。
  • 90% 的「连不上」卡在两处:ANTHROPIC_BASE_URL 写错,或把 ANTHROPIC_AUTH_TOKEN 误写成 ANTHROPIC_API_KEY
  • 用文末的「一条命令定位法」先拿到分层结论,再按对照表对症处理,不要凭感觉改配置。

报错三层定位示意图:网络层、鉴权层、模型层各自的典型报错串

图 1:一条请求要过三道关卡,报错串会告诉你被拦在哪一层(示意图)

先确认:你的 Claude Code 是怎么配置的

Claude Code 支持两种接入方式,排查前先弄清自己在用哪种,否则后面的每一步都会对错表:

  • 环境变量方式ANTHROPIC_BASE_URL(服务地址)+ ANTHROPIC_AUTH_TOKEN(中转场景常用 Bearer Token)。
  • 官方登录方式/login 走 Anthropic 账号 OAuth,不经过自定义 Base URL。

中转 / 自定义 API 场景使用环境变量方式。先跑一遍下面三条,把「实际生效的配置」打印出来(macOS / Linux):

echo "BASE_URL = $ANTHROPIC_BASE_URL"
echo "AUTH_TOKEN 是否已设置:$([ -n "$ANTHROPIC_AUTH_TOKEN" ] && echo yes || echo no)"
echo "API_KEY 是否已设置:$([ -n "$ANTHROPIC_API_KEY" ] && echo yes || echo no)"

两个常见陷阱在这里就能暴露:BASE_URL 结尾多写或少写一段路径;同一个终端里同时设置了 ANTHROPIC_API_KEYANTHROPIC_AUTH_TOKEN,实际生效的优先级和你以为的不一致。Windows PowerShell 用户注意环境变量写法是 $env:ANTHROPIC_BASE_URL,Linux 的 export 语法在 PowerShell 里不生效。

6 个报错串对照表

按报错串对号入座。右列命令可直接复制执行(把变量换成你自己的值)。

报错串(关键部分)真实含义最常见原因与处理
Invalid API key · Please run /login客户端没拿到可用的凭据中转场景十有八九是变量名用错:应使用 ANTHROPIC_AUTH_TOKEN 而不是 ANTHROPIC_API_KEY(后者按官方密钥格式校验)。改对后重开终端再试。
API Error: 401 · authentication_error请求已到达服务端,凭据被拒Key 已被删除/重置,或复制时带了空格。用下方自检命令直接请求一次,确认是 Key 问题还是客户端问题。
API Error: 404 · not_found_error(含 model 字样)请求到达了,但模型名在服务端不存在中转平台的模型名与官方不同。设置 ANTHROPIC_MODEL 映射为服务方实际提供的模型名(以服务方模型列表页为准)。
Connection error / ECONNREFUSED / ENOTFOUND网络层就没走通BASE_URL 拼写、协议(https 写成 http)、本地代理干扰。用 curl -I 直接探地址是否可达。
API Error: 429 · rate_limit_error请求太密或额度池限流等 30-60 秒重试;持续出现说明服务方并发/速率额度紧张,属服务端状况,改客户端配置无效。细分判断见429/502/530 状态码速查表
unable to verify the first certificate / SSL 相关TLS 握手失败先查本机系统时间是否准确;再排查本地代理/安全软件的 HTTPS 拦截。不要用跳过证书校验的方式「解决」。

一条命令定位法:把问题钉在某一层

与其反复改配置碰运气,不如直接用 curl 模拟一次最小请求。返回结果会明确告诉你问题在哪一层:

curl -sS "$ANTHROPIC_BASE_URL/v1/messages" \
  -H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-4-5","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
  • 毫无输出 / 连接超时 → 网络层:地址不可达或本地代理劫持,先解决连通性。
  • 返回 401 JSON → 鉴权层:Key 或变量名问题,回对照表第 1-2 行。
  • 返回 404 且提到 model → 模型层:模型名映射问题,回对照表第 3 行。
  • 返回正常 JSON(content 字段有文字) → 服务端链路完全正常,问题在 Claude Code 客户端本地配置:重开终端、检查是否有多处配置互相覆盖(shell 配置文件里的旧 export)。

注意:不同服务方的路径约定可能不同(有的 Base URL 已含 /api 等前缀),以上命令以「Base URL + /v1/messages」的常见约定为准,若 404 且不含 model 字样,向服务方确认正确的 Base URL 完整形态。

这些情况该等,别乱改

429 与 529/overloaded 类错误是服务端容量信号,等待重试是正确处理,任何客户端侧的配置改动都不会有帮助。连续 10 分钟以上全是 429,去服务方状态页或售后群确认,而不是继续重装客户端。

反过来,401 / 404 / Invalid API key 是确定性错误,等是等不好的,按对照表改完配置立即复测。

还没解决?按这个顺序收尾

  1. 重开终端(环境变量改动只对新会话生效,这是最常见的「改了没反应」)。
  2. 检查是否多处配置互相覆盖:shell 配置文件(.zshrc / .bashrc)里残留的旧 export。
  3. 用 curl 定位法区分「服务端正常、客户端配置错」还是「服务端本身不可用」。
  4. 需要服务入口与可用的模型列表,先看主站的 Provider 与 Base URL 配置自检,或在 shana.baby 售后群按「报错串 + curl 返回原文」提问,能省一轮来回。

维护说明

本文的报错串与命令基于 2026-09 的 Claude Code 常见报错形态与 OpenAI 兼容 / Anthropic 兼容中转的通用行为整理;「以官方文档为准」的断言(变量优先级、路径约定)在客户端大版本更新后会复测并更新本文日期。