接入教程

Claude Code 国内使用:连不上、慢、安装失败怎么办

Claude Code 在国内用不顺,多半是四件事之一:装不上、连不上、很慢、用一会儿就断。它们出在不同的层,换错东西不会有任何改善。下面按层给出检查命令,每一步都有通过标准。

Claude Code 国内接入三项基线指标:TLS 握手、首字节时间、五次抖动,附稳定与抖动两种链路的对比
先测三个数:TLS 握手、首字节、五次抖动——抖动比绝对值更重要

结论先行

  • 装不上:是安装源的问题,和 API 无关。原生安装器从 downloads.claude.ai 下载,npm 安装走 npm 源,先测这两处通不通。
  • 连不上:先用 curl 直接请求 $ANTHROPIC_BASE_URL/v1/messages。curl 通而 Claude Code 不通,问题多半在本机配置。
  • 很慢:用 curl 的 time_* 拆出 DNS、TLS、首字节几段,慢在哪段就改哪段。
  • 用一会儿就断:看断开的时间点是否固定。固定就是某一层的超时,随机才怀疑链路。
  • Base URL:ANTHROPIC_BASE_URL 只填网关根地址,不带 /v1。用 GPTZZZ 时填 https://gptzzz.ai。
本文只讲连不上、慢、安装失败

完整的变量和模型映射见 Claude Code 中转配置;还在比较网关,看 Claude Code 中转站怎么选;不用 Claude Code、直接调接口,看 Claude API 中转接入;Key 从哪来,看 Claude API Key 怎么获取。

先分清是哪一类问题

「Claude Code 连不上」底下其实混着四种故障,先看下表是哪一种。

症状出问题的层该查什么
安装命令卡住、报 403 或网络错误安装源下载地址或 npm 源
装好了,一发消息就报错或超时API 端点Base URL 和 Key
能收到回复,但很慢链路或模型慢在哪一段
能用一阵,然后断开长连接代理和网关的超时

第一类和后三类没关系。装不上只需换安装方式或安装源,跟用不用网关是两件事。

下面每一节都有通过标准。过了就往下走,不过就停在那一层解决。

装不上:先查安装源

官方推荐用原生安装器,它从 downloads.claude.ai 下载。先确认能不能连上这个地址:

curl -sI https://downloads.claude.ai/claude-code-releases/latest

Windows PowerShell 里要写成 curl.exe。官方排查文档对结果的解释:

结果含义
第一行是 200能连上下载服务器
403通常是代理或网络过滤拦了这个地址,或者 Claude Code 不在你所在的地区提供。中国大陆不在官方支持地区列表里
5xx服务临时故障,过几分钟再试
没有输出、Could not resolve host 或超时网络到不了这个地址

运行安装命令时报 syntax error near unexpected token `<',说明安装地址返回的是 HTML 页面,不是脚本。页面写着 App unavailable in region 时,表示所在地区不提供 Claude Code。地区政策的细节见国内用户常见难点:地区与支付。

官方也提供 npm 安装。它从 npm 源下载,安装时不需要访问 downloads.claude.ai。npm 安装要求 Node.js 22 或更高版本。

npm config get registry   # 当前用的 npm 源
npm ping                  # 超时说明这个源不通
npm install -g @anthropic-ai/claude-code

npm ping 超时,就换一个能访问的 npm 镜像源再装。注意两点:

  • 镜像源要同步 @anthropic-ai/claude-code 和它的 8 个平台包。缺平台包时,运行 claude 会报 claude native binary not installed。
  • 不要用 sudo npm install -g。官方文档提醒,这会带来权限问题和安全风险。

装完验证:

claude --version
claude doctor

claude --version 打印出版本号,安装这一层就通了。claude doctor 会检查安装状态和 settings 文件错误,不会启动会话。

提示 command not found: claude,通常是安装目录不在 PATH 里。macOS 和 Linux 上,原生安装器把它放在 ~/.local/bin/claude。先看这个目录在不在 PATH 里:

echo $PATH | tr ':' '\n' | grep -Fx "$HOME/.local/bin"

没有输出,就把它加进 shell 配置,再开一个新终端。下面是 zsh 的写法;Linux 上的 bash 改成 ~/.bashrc,macOS 上的 bash 改成 ~/.bash_profile:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

装好以后再出问题,就不是安装的事,不要回头折腾安装源。

连不上:先用 curl 测端点

装好后一发消息就报错,多半是端点或 Key 的问题。Claude Code 用官方支持的环境变量接网关:

export GPTZZZ_API_KEY="YOUR_GPTZZZ_API_KEY"
export ANTHROPIC_BASE_URL="https://gptzzz.ai"
export ANTHROPIC_AUTH_TOKEN="$GPTZZZ_API_KEY"
export ANTHROPIC_MODEL="claude-sonnet-5"

用别的网关时,把地址和 Key 换成它给你的值。最常见的坑有两个。

第一,Base URL 不带 /v1。Claude Code 会自己在后面拼 /v1/messages。写成 https://gptzzz.ai/v1,实际路径就变成 /v1/v1/messages,请求会失败。

第二,鉴权头要和网关对上。ANTHROPIC_AUTH_TOKEN 发 Authorization: Bearer,ANTHROPIC_API_KEY 发 x-api-key。网关只认其中一种时,放错变量会返回 401。GPTZZZ 两种都接受,任选其一。

配完先用 curl 直接测端点,再启动 Claude Code:

curl -sS -w '\n%{http_code} %{time_total}s\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-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'

返回以 {"id":"msg_ 开头的 JSON、状态码 200,端点这一层就通了。返回 401,是 Key 或鉴权头不对。报模型名错误,通常说明地址和 Key 已经通了,换成网关支持的模型 ID 即可。

这一步把「网关的问题」和「本机配置的问题」分开。curl 能通而 Claude Code 不通,问题多半在本机配置。Claude Code 里常见的报错:

Claude Code 里看到的原因怎么办
Can't reach the API server(ENOTFOUND)域名解析不了检查 Base URL 拼写和 DNS
Connection refused地址上没有服务应答,或被防火墙、代理拦了用上面的 curl 复现
401Key 不对,或放进了网关不读的请求头换另一个凭据变量,或重建 Key
API returned an empty or malformed response (HTTP 200)中间某层返回了 HTML 页面等非 API 响应用 curl 看返回的到底是什么
403 加一段 HTML,curl 测试却正常网关前的 WAF 或反向代理拦了请求体。Claude Code 的提示里有 XML 风格标签和源码,容易触发拦截规则请网关方对 /v1/messages 关闭请求体检查
curl 通了,Claude Code 还要求登录Claude Code 没读到凭据在 shell 里 export,或写进 ~/.claude/settings.json 的 env

按报错原文逐条处理,见按报错原文查。

用 GPTZZZ 时

Key 在控制台 /keys 页面创建,分组选 Claude官key。一个 Key 只属于一个分组,只能调用这个分组里的模型。模型 ID 以价格页为准,例如 claude-sonnet-5 价格;示例用 ANTHROPIC_MODEL 指定主模型,opus、sonnet、haiku 别名的映射见 Claude Code 中转配置。也可以用 GPTZZZ 桌面客户端写入配置:登录后把 GPTZZZ 加进客户端的供应商列表,但不会自动切换过去;原来的配置可以一键恢复。端点整体不通时,先看服务状态。

很慢:先测基线,再找慢在哪段

端点通了还是慢,不要直接换网关。先测五次,记下基线:

for i in 1 2 3 4 5; do
  curl -s -o /dev/null \
    -w "DNS %{time_namelookup}  连接 %{time_connect}  TLS %{time_appconnect}  首字节 %{time_starttransfer}  总计 %{time_total}\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-sonnet-5","max_tokens":16,"stream":true,"messages":[{"role":"user","content":"hi"}]}'
done

这几个值是累计的,后一个减前一个才是这一段的耗时。取五次的中位数,不要取最好的那次。最好的那次可能刚好碰上网络或上游空闲,代表不了平时的体感。

请求体里带了 "stream":true。不带的话,响应通常要等生成完才返回,首字节就包含了全部生成时间,拆不出输出速度。

curl time_ 各阶段耗时瀑布图,逐段标注原因与对应处理方式
按 curl 的五个时间点拆分一次请求,慢在哪一段决定了该换什么
哪一段慢经验参考值说明怎么处理
DNS 解析100 毫秒内本地 DNS 慢或被干扰换 DNS 服务器
连接 / TLS 握手200 毫秒内,超过 500 毫秒算差到网关的链路差换线路或网关节点
首字节2 秒内,超过 5 秒算慢网关到上游慢,或模型排队换网关,或换模型
总计减首字节看输出长度模型输出速度换更快的模型,或调小 max_tokens

抖动比绝对值更重要。平均 1.5 秒但偶尔 15 秒的链路,体验比稳定 3 秒差得多。五次结果偏离中位数超过一半,就算抖动大。

首字节时间最值得单独看。它包含网关到上游的链路和模型排队时间。DNS 和 TLS 只在新建连接时明显,连接复用后基本归零。

推理型模型的首字节可能很快,总时长却很长,因为它在思考。这不是网络问题,换网关没用。简单任务可以换推理档位低的模型。不同模型支持的推理档位不一样,配置前先确认。

把基线记在文件里,每次改配置后重跑对比。系统化的做法见中转站稳定性基准测试。

用一会儿就断:先看超时

Claude Code 的回复是流式的,依赖长连接。中途断开,靠断开的规律就能分清原因:

原因表现排查
代理软件或中间层超时每次在固定时长断,比如都是 60 秒调大那一层的超时
网关不支持长时间流式长回复断,短回复正常用下面的长输出请求测
上游限流高频使用时断看是否返回 429

Claude Code 自己的超时很宽。单次 API 请求默认 10 分钟(API_TIMEOUT_MS)。经网关的流式响应,要连续几分钟收不到任何数据才会被中断。

所以几十秒就断,先查本机代理软件和公司代理的超时,这一层的问题换网关没用。排除它们后仍是长回复断、短回复正常,再怀疑网关的流式超时。

网络慢或经过代理时,可以调大 API_TIMEOUT_MS(单位毫秒)。代理用 HTTPS_PROXY 设置;官方说明 Claude Code 不支持 SOCKS 代理。

测长流式是否稳定,直接发一个要求长输出的请求:

curl -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-sonnet-5","max_tokens":2000,"stream":true,
       "messages":[{"role":"user","content":"写一篇 1500 字的技术说明"}]}' \
  | tail -5

正常应以 message_stop 事件结束。中途无声中断,说明连接被掐了。再看断开时间点是否固定,就能分清是代理超时还是网关的问题。

429 等错误码的处理见API 中转站错误码对照;流式事件的完整性判断见流式响应与工具调用兼容性。

重试和并发:别在外面再叠一层

Claude Code 自己会重试失败的 API 请求,默认最多重试 10 次。次数可用 CLAUDE_CODE_MAX_RETRIES 调整。再在代理或脚本里加一层自动重试,次数会成倍叠加,网关拥塞时反而更慢。

自己写脚本调接口时,还有个特殊风险:带工具调用的请求重试,可能让副作用执行两次。比如写文件的工具已经执行,但响应超时,重试会再写一次。

五种失败情形的重试安全性判断:连接失败、429、5xx 纯文本可重试,含工具调用的 5xx 与流式中断不可自动重试
判断依据只有一条:这次失败之后,上游那边有没有可能已经发生了副作用
情况能不能重试
连接失败,请求没发出去能,安全
429 限流能,按 retry-after 退避
5xx 且是纯文本生成能
5xx 但本轮有工具调用不要自动重试,交给人判断
流式中断到一半不要重发整个请求,成本翻倍且可能重复执行

流式已经产出的部分是计过费的。重发整个请求,等于为同一段输出付两次钱。

并发也一样。网关有速率限制,超了返回 429,重试又加重拥塞。先串行跑通,再逐步提高并发,看总吞吐是否还在线性增长。不再增长的那个点就是上限。

退避和熔断的完整策略见中转站重试与故障回退;长期盯住延迟和 429 比例,见中转站可观测性。

「Claude Code 镜像站」到底指什么

官方安装文档里没有「镜像站」这一项。官方给的安装方式是原生安装器、Homebrew、WinGet、Linux 包管理器和 npm。中文里说的「镜像站」,通常指三种不同的东西:

说法指向实际是什么能不能用于命令行
Messages 兼容网关把 Messages 请求转发到上游能,这是标准接入方式
网页版套壳站一个聊天网页,与 CLI 无关不能
npm 镜像源解决 npm install 慢与 API 无关,只影响安装

要在终端里用 Claude Code 写代码,需要的是第一种。看对方给你的是什么:

  • 给 Base URL 加 Key:第一种,按端点检查一节配置。
  • 给 网页登录入口:第二种。它读不到你本地的文件,也执行不了命令。
  • 给 一行 npm 源配置:第三种。只解决安装,不解决连接。

有的站同时提供网页版和 API,两者的额度和计费往往是分开的。买了网页版套餐,不等于有 API 额度。

不想靠宣传页判断,就拿对方给的地址和 Key 发一条最小请求:

curl -sS -w '\n%{http_code}\n' -X POST "https://候选站点/v1/messages" \
  -H "Authorization: Bearer 你的密钥" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"对方的模型ID","max_tokens":1,"messages":[{"role":"user","content":"."}]}'

返回以 {"id":"msg_ 开头的 JSON,是 Messages 兼容网关;返回 404 或一段 HTML,多半是网页套壳站。对方只认 x-api-key 时,把鉴权头换成 x-api-key: 你的密钥 再试。

能连上只是第一关。协议、工具调用、计费这些怎么比,见 Claude Code 中转站怎么选。

把配置写进 settings,用 /status 核对

只在 shell 里 export 的变量有两个问题:开新终端就没了;从程序坞或开始菜单打开的编辑器读不到。官方文档也提醒,在后台运行的 Claude Code 会话(background agents)不一定能拿到 shell 里的变量。

curl 测通以后,把同样的值写进 ~/.claude/settings.json 的 env:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://gptzzz.ai",
    "ANTHROPIC_AUTH_TOKEN": "YOUR_GPTZZZ_API_KEY",
    "ANTHROPIC_MODEL": "claude-sonnet-5"
  }
}

不要把 Key 写进项目里的 .claude/settings.json,这个文件会提交到仓库。只对一个项目生效时,用 .claude/settings.local.json;手动创建时,先把它加进 .gitignore。

启动 Claude Code 后运行 /status:

/status

Anthropic base URL 一行显示网关地址,说明请求走的是网关。Auth token 或 API key 一行写着你设的变量名,说明用的是网关凭据,不是之前保存的登录。

settings 文件的 env 会覆盖 shell 里的同名变量。两处都配了且值不同,生效的是 settings 文件里的那个。

另一个可靠的确认方式是看网关控制台的用量记录。有对应时间的调用,说明请求确实走了网关。

按顺序排查一遍

遇到问题按这个顺序走,一层一层排除,不要跳步:

步骤检查通过标准对应的层
1curl -sI 下载地址,或 npm ping返回 200,或不超时安装源
2claude --version打印版本号安装源
3curl 发一条最小 messages 请求200,返回 msg_ 开头的 JSONAPI 端点
4curl 连测五次耗时TLS 中位数 200 毫秒内,首字节 2 秒内,抖动不超过中位数一半链路
5curl 发长流式请求以 message_stop 结束长连接
6启动 Claude Code,运行 /status显示网关地址和凭据变量本机配置
7让它读一个文件工具调用成功整条链路

在第几步断,问题就在那一层。第 3 到 5 步只用 curl,不依赖 Claude Code 本身,能把客户端排除在外。

跳过前几步直接改 Claude Code 配置,是最浪费时间的做法。配置改来改去,问题其实在 DNS 上。带着一个 60 秒超时的代理去换网关,换几家都一样。

官方资料

核验日期

Claude Code 的安装、环境变量、超时和 /status 内容,按官方文档复核于 2026-10-10。GPTZZZ 的地址、鉴权方式、分组和模型 ID 取自当日的文档页和模型价格页。操作前请再核对官方文档和 GPTZZZ 控制台。

常见问题

Claude Code 国内连不上,先查什么?

先用 curl 直接请求 $ANTHROPIC_BASE_URL/v1/messages。curl 通而 Claude Code 不通,问题多半在本机配置,用 /status 看实际生效的地址和凭据;curl 也不通,再查 Base URL、Key 和网络。

有 Claude Code 官方镜像站吗?

官方安装文档里没有镜像站这一项。中文里说的镜像站通常指三种东西:Messages 兼容网关、网页套壳站、npm 安装源。要让终端里的 Claude Code 连上模型,只能用第一种,看对方给的是不是 Base URL 加 Key;npm 源只解决安装。

ANTHROPIC_BASE_URL 要不要带 /v1?

不带。只填网关根地址,Claude Code 会自己拼上 /v1/messages。用 GPTZZZ 时填 https://gptzzz.ai。

环境变量配了但没生效?

settings 文件 env 里的同名变量会覆盖 shell 里 export 的值。用 /status 看实际在用的地址和凭据来源。shell 变量只在启动时读取,改完要重开 Claude Code。

换个网关能把延迟降下来吗?

要看慢在哪一段。TLS 握手慢,换节点有效;首字节慢,取决于新网关到上游的链路,换了也可能一样;模型本身输出慢,换网关没用。先拆分阶段再决定。

为什么长任务总在同一个时间点断?

断点固定,几乎一定是某一层的超时,不是网络。依次检查代理软件、反向代理和网关的超时设置。Claude Code 自己的单次请求超时默认是 10 分钟。随机时间点的中断才需要怀疑链路。

晚上比白天慢很多,正常吗?

上游在高峰期排队会让首字节变长,这是普遍现象。但如果 TLS 握手也同步变慢,说明是网关侧或你本地的网络拥塞,不是上游排队。两者处理方式不同,靠拆分阶段才能区分。

Claude Code 中转站从本地工作区经过兼容网关到模型上游并执行验证与回退的信任边界图接入教程

Claude Code 中转站配置:API、Base URL 与验证

Claude Code 怎么接中转 API?ANTHROPIC_BASE_URL 填网关根地址(不带 /v1),Key 用 ANTHROPIC_AUTH_TOKEN 或 ANTHROPIC_API_KEY,再验证模型、流式响应和工具调用,并检查密钥保护与切回官方的方法。

Claude Code 中转站配置Claude Code API 中转站Claude Code 网关配置
Claude Code 中转站四项核对信息图:协议兼容、工具调用、长上下文、计费透明,任一项不过即不必比较价格接入教程

Claude Code 中转站怎么选:九项可验证的判断标准

选 Claude Code 中转站不能只看价格和倍率。用协议兼容性、模型真实性、流式与工具调用、故障行为、计费透明度、数据边界、退出成本逐条实测,并给出可复制的验证命令。

Claude Code 中转站推荐Claude Code 中转站怎么选Claude Code 网关选型