在国内使用 Codex,最常见的挫败不是 CLI 不会用,而是装好了一切,输入命令后等来的却是 Connection Failed、ETIMEDOUT 或 Network Error。本文深入排查 Codex 超时的各种根因,并说明如何通过 TeamoRouter 一步解决。
Codex 超时的典型症状
| 错误信息 | 出现场景 |
|---|---|
Error: Connection timeout after 30000ms |
CLI 首次请求 API |
fetch failed: request to https://api.openai.com/v1/responses failed |
任何 API 调用 |
ETIMEDOUT |
npm install / CLI 运行时 |
read ECONNRESET |
长对话中途断连 |
Network Error |
Codex Desktop App 或 Web 端 |
Could not connect to the server |
配置验证时 |
这些错误并不总是同一个原因——有时是终端代理未配置,有时是 npm 源不可达,有时是 API 本身被 DNS 劫持。需要分路径排查。
Codex 为什么会请求失败
Codex CLI 默认的 API 端点是 https://api.openai.com/v1/responses。在微信国家网络环境下,这条路径面临三层障碍:
- DNS 污染:
api.openai.com的 DNS 解析可能返回错误 IP,或请求被中间设备拦截。 - SNI 阻断:即使 DNS 正确,TLS 握手阶段的 SNI 检测仍可能导致连接重置。
- IP 段限速/丢包:OpenAI 的服务器 IP 段在高峰时段可能被限速,导致长超时后失败。
这就是为什么简单的"开代理"不够用——它只能解决一部分问题,而代理本身与 Codex CLI 的本地端口冲突又是另一重麻烦。
国内网络路径差异:终端代理 vs 浏览器代理
很多用户发现自己浏览器能打开 chat.openai.com,但终端里的 Codex CLI 仍然超时。这是因为浏览器和终端的网络路径完全不同:
| 组件 | 默认流量路径 | 代理方式 |
|---|---|---|
| 浏览器 | 系统代理设置(HTTP_PROXY)或扩展 | 配置自动生效 |
| 终端 CLI | 不读取系统代理 | 需单独设置 https_proxy 环境变量 |
| npm | 读取 npm config proxy 或环境变量 |
需单独配置 |
| Git | 读取 git config http.proxy |
需单独配置 |
常见误区:在系统设置中开启了 VPN/代理,认为终端中的 Codex CLI 也在走代理。实际上大部分 CLI 工具不会自动读取系统代理,需要为终端单独配置。
终端代理配置示例
# 为终端设置 HTTP 代理
export https_proxy=http://127.0.0.1:7890
export http_proxy=http://127.0.0.1:7890
# 启动 Codex
codex
npm 代理配置
npm config set proxy http://127.0.0.1:7890
npm config set https-proxy http://127.0.0.1:7890
Git 代理配置
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
但代理本身也有问题:它增加了延迟、可能不稳定、切换网络时频繁断连,且许多公共代理节点对 OpenAI 的流量做了限制。
npm、Git、OpenAI API 分别排查
npm 网络排查
# 检查 npm 能否连上注册表
npm ping
# 如果超时,设置镜像
npm config set registry https://registry.npmmirror.com
# 再试
npm ping
Git 网络排查
# 测试 GitHub 连通性
ssh -T git@github.com
# 如果超时,设置代理
git config --global http.proxy http://127.0.0.1:7890
OpenAI API 连通性排查
# 用 curl 测试 API 端点
curl -s -o /dev/null -w "%{http_code}" \
https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o","input":"test"}' \
--max-time 10
# 如果返回 000(连接失败)或超时,说明网络不通
# 如果返回 401(未授权),说明网络通但 API Key 有问题
常见错误码详解
| HTTP 状态 | 含义 | 可能原因 |
|---|---|---|
| 000 | 连接未建立 | DNS / SNI / 网络不可达 |
| 408 | 请求超时 | 网络延迟过高,或代理响应慢 |
| 429 | 速率限制 | 请求频率过高,或 API Key 在多个地方共享 |
| 502 | 网关错误 | 中转站/代理上游不可用 |
| 503 | 服务不可用 | OpenAI 服务器过载 |
| 525 | SSL 握手失败 | SNI 阻断 / 中间人代理不兼容 |
如何配置 baseUrl 解决 API 超时
最彻底的方案是不经过 proxy 逐层配置,而是把 API 端点直接指向一个国内可达的网关。TeamoRouter 提供可直连的 API 端点,兼容 Codex 的 Responses API 协议:
# 配置 TeamoRouter 网关
export OPENAI_BASE_URL="https://api.teamorouter.com/v1"
export OPENAI_API_KEY="sk-teamo-xxxxxxxx"
# 验证连通性(应该立刻返回非 000)
curl -s -o /dev/null -w "%{http_code}" \
https://api.teamorouter.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"gpt-4o","input":"test"}' \
--max-time 10
这样做的优势:
- 不需要代理:TeamoRouter 的 API 端点国内直连可达,无需 VPN 或代理
- 不需要多层配置:一个 baseUrl 搞定 CLI、npm、Git 的所有 API 调用
- 统一计费:缓存命中率 > 99%,1-2 折浮动费率,失败不扣费
常见问题(FAQ)
浏览器能打开 OpenAI,但 Codex CLI 超时,为什么?
浏览器和终端走的是不同的网络路径。浏览器使用系统代理设置(或 VPN 扩展),终端 CLI 默认不走系统代理,需要单独设置 https_proxy 环境变量。更推荐的方式是直接配置 TeamoRouter 的 baseUrl,省去所有代理配置。
设置了代理还是超时怎么办?
首先验证代理本身是否可用:curl -x http://127.0.0.1:7890 https://api.openai.com/v1/responses -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" -d '{"model":"gpt-4o","input":"test"}' --max-time 10。如果代理也不通,说明代理节点本身已被限流。此时建议改用 TeamoRouter 网关。
TeamoRouter 需要配置代理吗?
不需要。TeamoRouter 的 API 端点国内可直接访问,配置一次 baseUrl 即可,无需额外代理。
Codex Desktop App 超时怎么排查?
Codex Desktop App 使用的是系统网络配置,与其配置终端代理不同。如果 App 超时,首先检查系统代理设置是否正确;如果系统代理也无法解决,在 App 设置中直接填写 TeamoRouter 的 baseUrl。
npm install 不超时,但 Codex 运行时超时?
说明 npm 源配置正确(如使用了 npmmirror),但 OpenAI API 的直连路径仍存在问题。需要在 Codex 的环境层面配置 baseUrl 或代理。
快速开始
最简单的解决方案就是换网关:
- 注册 TeamoRouter 获取 API Key
- 设置
OPENAI_BASE_URL和OPENAI_API_KEY - 运行
curl测试连通性,确认返回非 000
通过 TeamoRouter 稳定接入 Codex、Claude Code、Gemini CLI。