配好 ANTHROPIC_BASE_URL 后请求返回 404 的原因
更新于 2026-08-21
一句话:路径写重了。客户端会自己补 /v1/messages,你再写一遍就变成了 /v1/messages/v1/messages。
现象
环境变量配好、密钥也对,但所有请求返回 404:
404 page not found
或者返回一段 HTML 而不是 JSON。
原因
Anthropic 协议的客户端(包括 Claude Code)在发请求时,会在 ANTHROPIC_BASE_URL 的基础上自动拼接 /v1/messages。
所以这样配是错的:
# ✗ 错误:把完整端点路径写进去了
export ANTHROPIC_BASE_URL=https://your-gateway.example.com/v1/messages
# 实际请求地址变成 https://your-gateway.example.com/v1/messages/v1/messages
解决
只写到域名,或最多写到 /v1:
# ✓ 正确
export ANTHROPIC_BASE_URL=https://your-gateway.example.com
# ✓ 也可以
export ANTHROPIC_BASE_URL=https://your-gateway.example.com/v1
改完要开新终端,或者手动重新 export——命令行里 export 过的值优先级高于配置文件,只 source ~/.bashrc 是覆盖不掉的。
怎么确认
绕开客户端,用 curl 直接打端点。这样报错信息清楚得多:
curl -sS https://your-gateway.example.com/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-d '{"model":"claude-sonnet-5","max_tokens":32,
"messages":[{"role":"user","content":"只回复两个字:通了"}]}'
返回 JSON 且 content 里有文本,说明这条链路是通的,问题就在客户端配置。
顺带排除另外两种 404
- 网关本身不提供该路径:有些网关只暴露
/chat/completions这类路径,不支持 Anthropic 协议的/v1/messages - 多了或少了斜杠:
https://host//v1这类写法在部分网关上也会 404
相关
如果不是 404 而是 401 / 403,那是密钥问题,跟路径无关,用上面那条 curl 单独验证密钥即可。
还没把 Claude Code 跑起来?
Code2AI(code2ai.codes)提供官方 Claude Code 命令行的订阅制接入, 配置两个环境变量即可开始使用,支持全系列 Claude 模型,额度在控制台实时可查。