Claude Code 怎么接入中转站?ANTHROPIC_BASE_URL 配置、验证和常见报错
一句话:Claude Code 官方支持把请求发到第三方网关,中转站就是这样一个网关。只要两个环境变量:ANTHROPIC_BASE_URL 填站方给的接口地址,ANTHROPIC_AUTH_TOKEN 填站方给的 Key。先在终端里临时设置并用 curl 验证,确认能通再写进用户级 settings.json。下面的写法都按 Claude Code 官方文档(2026-10-28 核对),示例地址统一用 relay.example.com,换成你自己的站即可。
接入前确认三件事
第一,站方提供的是 Anthropic 格式的接口,也就是支持 /v1/messages。通过 ANTHROPIC_BASE_URL 接入时,Claude Code 按 Anthropic Messages 格式发请求,只提供 OpenAI 格式(/v1/chat/completions)的站接不上。
第二,问清 Key 怎么传。官方文档的规则是:ANTHROPIC_AUTH_TOKEN 放在 Authorization: Bearer 请求头里,ANTHROPIC_API_KEY 放在 x-api-key 请求头里。不确定时先用 ANTHROPIC_AUTH_TOKEN,验证返回 401 再换另一个。
第三,Key 只放用户级配置。不要写进项目里的 .claude/settings.json,那个文件会随仓库提交,等于把 Key 公开给所有能看到代码的人。
第一步:在终端里临时设置
macOS、Linux 用 Bash 或 Zsh:
export ANTHROPIC_BASE_URL=https://relay.example.com
export ANTHROPIC_AUTH_TOKEN=sk-你的中转站KeyWindows 用 PowerShell:
$env:ANTHROPIC_BASE_URL = "https://relay.example.com"
$env:ANTHROPIC_AUTH_TOKEN = "sk-你的中转站Key"注意地址一般不带 /v1,Claude Code 会自己拼上 /v1/messages。站方文档写的是带 /v1 的地址时,以站方说明为准,下一步的 curl 能帮你确认。这种设置只对当前终端有效,关掉就没了。
第二步:用 curl 先测一次
在同一个终端里发一条只要 1 个 token 的请求,确认地址和 Key 都对,再打开 Claude Code。这样出了问题能分清是站方接口的问题还是配置的问题。
curl -sS -w '\n%{http_code}\n' -X POST "$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-opus-5-5", "max_tokens": 1, "messages": [{"role": "user", "content": "."}]}'返回以 {"id":"msg_ 开头、带 content 字段的 JSON,说明接口和 Key 都可用。返回“模型不存在”一类的错误,也说明 Key 已经通过验证,只是模型名要换成站方支持的名字。返回 401 说明 Key 不对,或者站方要用 x-api-key:把请求头换成 x-api-key: $ANTHROPIC_API_KEY 再试。
第三步:写进用户级 settings.json
验证通过后,把两个变量写进 settings 文件的 env 块,以后每次启动都会生效,后台会话也能读到。路径是 ~/.claude/settings.json,Windows 上是 %USERPROFILE%\.claude\settings.json。
{
"env": {
"ANTHROPIC_BASE_URL": "https://relay.example.com",
"ANTHROPIC_AUTH_TOKEN": "sk-你的中转站Key"
}
}只想在某个项目里用这个站,就写进项目里的 .claude/settings.local.json,并确认它在 .gitignore 里。终端变量和 settings 文件同时设置时,以 settings 文件为准。
用 VS Code 扩展的话,官方建议把变量写进 VS Code 用户设置的 claudeCode.environmentVariables,因为扩展启动时的登录检查只读这里。
第四步:用 /status 确认
启动 claude,发一句话,再输入 /status。Status 页里要看到两行:Anthropic base URL 显示你的中转地址,Auth token(或 API key)一行写着你设置的变量名。没有 base URL 这一行,说明变量没传进来;显示的是 claude.ai 账号登录,说明凭据没生效,还在用订阅。
计费上要知道一点:官方文档说明,网关凭据生效后请求不再使用 claude.ai 订阅额度,而是按 token 计费给凭据的所有者,也就是按站方的分组倍率扣你的余额。只设置 ANTHROPIC_BASE_URL、不设凭据时,已登录的订阅仍然生效。
模型名和站方不一致怎么办
有的站把模型改了名,或者只提供部分模型。可以用 ANTHROPIC_MODEL 指定默认模型,用 ANTHROPIC_DEFAULT_OPUS_MODEL、ANTHROPIC_DEFAULT_SONNET_MODEL、ANTHROPIC_DEFAULT_HAIKU_MODEL 把 opus、sonnet、haiku 这几个别名指到站方的模型名。设置 CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 后,Claude Code 启动时会向网关查询模型列表,加进 /model 选择器。
多个中转站之间切换,最简单的做法是给每个项目各写一份 settings.local.json,或者在 shell 配置里为每个站写一组变量,用的时候切换。
常见报错怎么处理
下表整理自官方网关文档的排错表,挑了接中转站时最常遇到的几种。
| 现象 | 原因 | 处理 |
|---|---|---|
| 401,提示 Key 无效 | Key 不对,或放错了请求头 | ANTHROPIC_AUTH_TOKEN 与 ANTHROPIC_API_KEY 换一个试;到站方后台确认 Key 未被删除 |
| curl 能通,Claude Code 仍要求登录 | 凭据只写在项目 settings 里,首次启动向导时还没生效 | 把 ANTHROPIC_AUTH_TOKEN 写进终端变量或 ~/.claude/settings.json |
| 设置了 ANTHROPIC_API_KEY 却没生效 | 交互模式要先批准一次,之前拒绝过就不再询问 | 在 /config 里打开 Use custom API key |
| 启动提示同时存在两个凭据来源 | 网关凭据和已登录的 claude.ai 账号同时存在 | 运行 /logout 只保留网关凭据 |
| 400,提示 Extra inputs are not permitted | 站方上游不接受 Claude Code 发送的新字段 | 设置 CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1 |
| 400,提示 thinking 或 adaptive | 站方上游不支持自适应思考 | 换站或换分组;部分模型可设 CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 |
| empty or malformed response (HTTP 200) | 站方返回了 HTML 错误页或登录页,不是 API 响应 | 用 curl 检查地址是否正确,是否少了或多了路径 |
| 403,返回 HTML 页面 | 站方的防火墙拦截了含代码的请求体 | 联系站方放行 /v1/messages,或换站 |
| Connection refused / ENOTFOUND | 地址写错或网络不通 | 先用 curl 验证,确认域名能解析、端口能连 |
来源:Claude Code 官方文档「Connect Claude Code to an LLM gateway」排错表,2026-10-28 核对。
接好之后先自测
能用不等于是真的。接通后建议先用统一标准跑一次检测:Claude 的加密思考签名能证明思考块确实由 Claude 生成,Pulse 的在线检测会校验它,判读方法见《怎么判断掺水、降智、假模型》。长对话的缓存是否真按缓存价计费,用缓存篇的方法对一次账单。
安全上,中转站能看到 Claude Code 发出的全部内容,包括读取的代码文件和命令输出。公开研究发现有中转会改写返回的工具调用、动用诱饵凭据。不要让 Claude Code 读取私钥、生产环境配置和密码文件,重要项目在容器或独立账户里运行,给中转单独设额度。
我们的数据
选站之前,可以先看看 Pulse 收录的 Claude 分组整体情况:分组数、倍率分布、统一标准实测结论和可用率分布,随每轮采集自动更新。具体站点在站点排名里按 Claude 筛选。
数据截至 2026-10-31 23:16(北京时间),随 Pulse 每轮采集自动更新。
接入前先看看目标分组在 Pulse 的记录。下面是 Claude 分组的整体情况,随采集自动更新。
| 项目 | 数值 |
|---|---|
| Claude 分组数(有站方可用率 / 全部) | 1,235 / 3,879 |
| 分组倍率 P10 / 中位数 / P90 | 0.15 / 0.95 / 2.42 |
| 统一实测标准 | claude-opus-5-5 · 思考档 xhigh |
| 当前分组实测结论 | 通过 22、待复核 34、未通过 30、降智 7、疑似假模型 102、不符合标准 9、其他 3 |
| 分组名可识别的渠道 | CC Max 989、Kiro 787、AWS 219、零注入 69、逆向 46、官方 35 |
| 近 30 天 Claude 自动实测(次) | 334:通过 25、待复核 37、未通过 210、不符合标准 57、其他 5 |
| 其中思考签名缺失或偏短(次,含各家族) | 109 |
倍率为站方显示的分组倍率,不含充值汇率;结论按分组计,一个站可能有多个分组。
| 近 7 天可用率 | ≥99% | 95%–99% | 80%–95% | <80% |
|---|---|---|---|---|
| Claude 分组占比 | 27.7% | 25.0% | 21.0% | 26.3% |
样本 372 个有 7 天读数的 Claude 分组;7 天与 30 天都达标的 150 个。
常见问题
国内能用 Claude Code 吗?
Anthropic 的支持地区列表里没有中国内地和香港。用中转站时 Claude Code 本身可以运行,但上游条款与断供风险由站方承担、最终影响你的余额,本文不讨论绕过地区限制。
ANTHROPIC_AUTH_TOKEN 和 ANTHROPIC_API_KEY 用哪个?
看站方要哪个请求头:Bearer 用 ANTHROPIC_AUTH_TOKEN,x-api-key 用 ANTHROPIC_API_KEY。不确定先用 ANTHROPIC_AUTH_TOKEN,401 再换。
接了中转站还会消耗我的 Claude 订阅额度吗?
凭据变量生效后不会,请求按站方计费;只设置 ANTHROPIC_BASE_URL 不设凭据时,订阅登录仍然生效。
Key 可以写进项目里的 .claude/settings.json 吗?
不要。这个文件会随仓库提交。用 ~/.claude/settings.json,或项目里已加入 .gitignore 的 settings.local.json。
接入后怎么确认用的是真 Claude?
用统一标准检测校验思考签名和计费字段,例如 Pulse 在线检测;只看回答内容或 model 字段不够。