AI 访问问题 · 故障排查

AI API 连不上或超时怎么排查

作者:机场a 编辑部 更新: 阅读约 3 分钟

命令行里 AI API 连不上,最常见的原因是终端程序不读取系统代理,浏览器能打开 ChatGPT、Claude,命令行却仍在直连。最快的办法是在终端设置 HTTPS_PROXY 环境变量,或者开启客户端的 TUN 模式,并确认出口节点位于服务支持的地区。命令行和网页的分流规则最好保持一致,避免同一账号从不同地区发出请求。

问题表现

  • curl、Python/Node.js 脚本或 SDK 报 Connection timed out、ECONNRESET、Connection refused;
  • API 返回 403 或类似「unsupported country / region」「User location is not supported」的提示;
  • Claude Code、Codex 启动时提示无法连接服务,或登录授权后卡住;
  • 流式输出写到一半突然中断,长任务频繁报错重试。

可能原因

  1. 终端没有走代理:系统代理主要对浏览器和部分应用生效,多数命令行工具只认 HTTPS_PROXY 等环境变量;
  2. 出口地区不受支持:API 和网页一样按出口 IP 判断地区。根据本文更新时查阅的官方页面,OpenAI API 与 Gemini API 的支持列表中都没有中国大陆、香港和澳门,Anthropic 的支持列表同样不含这三地,台湾三家都在列。各家页面会调整,以官方最新列表为准;
  3. 代理协议不被支持:例如 Claude Code 官方文档说明不支持 SOCKS 代理,必须使用 HTTP(S) 代理地址;
  4. 节点自动切换:AI 域名放在 url-test、load-balance 这类自动策略组里,测速后换节点会切断正在进行的长连接;
  5. 节点或中转不稳定:流式响应可能持续数分钟,丢包或中转空闲超时都会让连接被重置。

排查方法

  1. 先测网络是否通(端口以客户端显示的混合端口为准,示例用 7890):

    curl -I https://api.openai.com/v1/models
    curl -I -x http://127.0.0.1:7890 https://api.anthropic.com/v1/models

    不带 API Key 时能收到 HTTP 响应(通常是 401)就说明网络已连通;第一条超时、第二条正常,说明终端没有走代理。

  2. 确认出口地区:通过代理请求一个 IP 查询接口,看国家/地区是否在服务支持列表中,必要时参考《AI 登录失败与地区不支持》。

  3. 查看客户端连接页:找到 api.openai.com、api.anthropic.com、generativelanguage.googleapis.com 等连接,确认命中的规则和节点。

  4. 检查策略组类型:AI 相关域名是否在自动测速或负载均衡组中。

解决步骤

1. 为终端设置代理环境变量

本机代理通常是 HTTP 代理,所以 HTTPS_PROXY 的值也写 http://。只对当前终端窗口有效:

Windows 命令提示符(cmd),等号两边不要加空格:

set HTTPS_PROXY=http://127.0.0.1:7890
set HTTP_PROXY=http://127.0.0.1:7890
set NO_PROXY=localhost,127.0.0.1

Windows PowerShell:

$env:HTTPS_PROXY="http://127.0.0.1:7890"
$env:HTTP_PROXY="http://127.0.0.1:7890"
$env:NO_PROXY="localhost,127.0.0.1"

macOS / Linux:

export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
export NO_PROXY=localhost,127.0.0.1

设置后在同一窗口重新启动工具。Claude Code 只在启动时读取一次环境变量,也可以写进 ~/.claude/settings.json 的 env 字段长期生效;在会话中运行 /status 可以看到当前使用的代理。NO_PROXY 用来让本机回调地址不走代理,避免浏览器授权回到终端时失败。

2. 环境变量无效时改用 TUN

Python 的 openai、anthropic SDK 底层使用 httpx,默认会读取这些变量;但部分 Node.js 程序、Go 程序或自带网络栈的工具不一定读取。这时开启 TUN 模式 接管全部流量更省事,并确保 TUN 下 DNS 也经过客户端。

3. 给 AI 域名固定一个节点

新建一个手动选择(select)策略组,把 OpenAI、Anthropic、Google AI 相关域名都分到这个组,固定使用一个支持地区的稳定节点。写法见《分流规则教程》。长任务进行中不要手动切换节点。

4. 处理流式中断和超时

  • 换延迟稳定、丢包低的节点,比单纯追求低延迟更重要;
  • 网络较慢时可适当调大工具或 SDK 的超时,例如 Claude Code 支持 API_TIMEOUT_MS,SDK 一般提供 timeout 参数;
  • 批量请求时降低并发,避免触发服务方的速率限制被误以为是网络问题(速率限制通常返回 429)。

验证结果

  • 不加 -x 的 curl -I https://api.anthropic.com/v1/models 也能很快收到 HTTP 响应,不再超时;
  • SDK 示例脚本可以完整返回流式结果;
  • Claude Code、Codex 能正常登录并连续完成多轮任务,没有反复重试。

其他方案

常见问题

设置了 HTTPS_PROXY,Claude Code 还是连不上?

先确认是在设置变量之后重新启动的 Claude Code,它只在启动时读取一次环境变量。再确认代理地址以 http:// 开头且端口正确,地址无法解析时 Claude Code 会在启动时报错。官方文档还说明 Claude Code 不支持 SOCKS 代理。

为什么 curl 返回 401,算不算连上了?

算。401 表示请求已经到达服务器,只是没有带 API Key。真正的网络问题通常表现为超时、连接被重置或无法解析域名。

返回 429 是网络问题吗?

不是。429 表示请求频率或额度超出限制,应降低并发、等待后重试,或检查账户额度,换节点无法解决。

环境变量每次都要重新设置吗?

上面的写法只对当前窗口有效。可以写进 shell 配置文件(如 ~/.zshrc、~/.bashrc),Windows 可在“系统属性 → 环境变量”中添加用户变量;Claude Code 也可以在 ~/.claude/settings.json 的 env 字段中设置。

相关阅读

按 ⌘K / Ctrl+K 打开搜索