Codex CLI 无法连接、OAuth 回调失败怎么办:终端代理、localhost 被代理拦截、浏览器与终端节点不一致
Codex CLI 登录时浏览器授权成功但终端一直等待、提示回调超时,或者直接连不上 API,原因在终端没走代理、OAuth 的 localhost 回调被代理规则截走、浏览器和终端走了不同节点、企业网络限制。本文讲每种情况怎么判断和处理。
两种失败,两种处理
Codex CLI 的连接问题分两类,先看自己是哪一类:
- 登录(OAuth)失败:执行登录命令后浏览器打开了授权页,点了同意,终端却一直在等,最后提示超时或回调失败。
- API 连接失败:登录是成功的,但发任务时报 fetch failed、ECONNREFUSED、ETIMEDOUT。
第二类和其他终端 AI 工具的处理相同;第一类是 Codex 特有的,涉及 OAuth 的本地回调。安装和基础配置见 Codex 与 Cursor 使用教程,本文只处理连接失败。
API 连接失败:终端没走代理
浏览器走系统代理,终端里的 Node.js 程序默认不走。浏览器能开 chatgpt.com、Codex 连不上,就是这个。
环境变量方式
在终端里设置:
export HTTPS_PROXY=http://127.0.0.1:7890
export HTTP_PROXY=http://127.0.0.1:7890
端口按你的客户端改,Clash 类默认 7890。设置后在同一个终端启动 Codex。要永久生效就写进 shell 配置文件。
验证:curl -I https://api.openai.com,能返回响应头就通了。
TUN 方式
客户端开 TUN 模式,系统全部流量经过代理,终端不需要设置。TUN 的常见问题见 TUN 模式问题排查。
两种方式选一种,不要同时用。
OAuth 回调失败:localhost 被代理拦截
这是 Codex 登录问题里最特殊也最常见的一种。
OAuth 登录的流程是:Codex 在本地监听一个端口(比如 localhost:1455),打开浏览器去 OpenAI 授权,授权完成后 OpenAI 让浏览器跳转回 http://localhost:1455/callback?code=...,Codex 从这个请求里拿到授权码。
问题出在最后一步。如果代理客户端的规则把 localhost 的请求也接管了,浏览器对 localhost 的访问会被送进代理,代理在远端找不到 localhost,请求失败,Codex 收不到回调。表现就是浏览器显示「授权成功」或者白屏报错,终端一直等到超时。
判断方法
登录时临时关掉系统代理(客户端里关「系统代理」开关,保留 TUN 也要关),再试一次。能登录,就是 localhost 被拦截。
处理
客户端的系统代理设置里有「绕过列表」(bypass),确保里面有:
localhost
127.0.0.1
::1
Clash Verge 在「系统代理」设置的「绕过域名」里;Clash Party 和 FlClash 有类似选项;macOS 系统代理的绕过列表在网络设置里。
浏览器扩展代理(SwitchyOmega 之类)也要加 localhost 绕过。
TUN 模式下,localhost 一般不会被接管,但部分客户端的 TUN 会接管 127.0.0.1 以外的本地地址,报错的话把回调地址改成 127.0.0.1 试试。
端口被占用
Codex 监听的回调端口被其他程序占了,它根本起不来,浏览器跳转回来是「拒绝连接」。用 lsof -i :端口号 看是谁占的,关掉再登。
浏览器与终端节点不一致
OAuth 流程中,浏览器访问 OpenAI 的授权页,终端拿授权码换 token。这两步分别经过浏览器的代理和终端的代理。如果浏览器走的是节点 A、终端走的是节点 B,OpenAI 看到两个不同的 IP 完成同一次登录,可能拒绝。
常见情形:浏览器用了扩展代理指向某个节点,终端环境变量指向 Clash 的另一个策略组;或者 ChatGPT 域名走了 url-test 自动选择,两次请求之间恰好切了节点。
处理:把 openai.com、chatgpt.com、auth0.com 固定到一个手动选择的节点,浏览器和终端都通过同一个客户端出去。节点怎么挑见 AI 节点选择。
企业网络
公司网络下的三个常见障碍和处理:
- TLS 拦截证书:Node.js 不信任公司自签证书,报证书错误。
export NODE_EXTRA_CA_CERTS=/path/to/company-root.pem。不要关闭证书验证。 - 防火墙白名单:api.openai.com、auth.openai.com 不在白名单里。找 IT 加,或者用自己的网络。
- 回调被公司代理截走:公司强制代理同样可能接管 localhost。同样加绕过,或者在公司网络外完成一次登录,凭证存下来以后就不需要再回调了。
排查顺序
- 分清是登录失败还是 API 失败。
- API 失败:
curl -I https://api.openai.com测终端代理。不通就设环境变量或开 TUN。 - 登录失败:关系统代理登一次。能登就是 localhost 拦截,加绕过。
- 还不行:固定节点,让浏览器和终端走同一个出口。
- 公司网络:处理证书和白名单。
- 换一个客户端模式再试(环境变量换 TUN,或反过来)。
登录成功后
OAuth 的凭证会存在本地,之后的使用只有 API 连接,不再需要回调。所以回调问题只在登录这一次,解决一次就好。之后如果凭证过期需要重新登录,再走一遍绕过的检查。
Codex 的使用场景和适合的机场见 Codex 工具页 和 AI 工具机场推荐。
常见报错对照
| 报错 | 原因 | 处理 |
|---|---|---|
ECONNREFUSED 或 connect timeout | 终端没走代理,或代理端口写错 | 确认客户端混合端口,重新 export;用 curl -I https://api.openai.com 验证 |
| 浏览器打开授权页后一直转圈 | 浏览器和终端走的节点不一致,或 OpenAI 判定地区不支持 | 两边都固定同一个美国节点,香港、台湾节点换掉 |
授权成功但终端提示 callback failed | localhost:1455 的回调请求被系统代理劫持 | 把 localhost、127.0.0.1 加入客户端的绕过列表,或登录那一分钟临时关闭系统代理 |
401 / invalid_api_key | 用的是 API Key 登录但 Key 失效,或账号没有 Codex 权限 | 到 OpenAI 后台重建 Key,确认订阅档位包含 Codex |
429 | 短时间请求太多,或共享 IP 被限流 | 等几分钟;长期频繁出现换节点,见 ChatGPT 429 怎么办 |
回答中途 stream closed | 长连接被中断 | 换专线节点,错开晚高峰 |
选机场时为 Codex 考虑什么
Codex 一次任务可能持续几十分钟并持续占用一条到 OpenAI 的连接,对节点的要求是「稳」而不是「快」。看三点:是否有美国专线节点;节点 IP 是否被标记为数据中心(会更容易触发验证),参考 原生 IP;晚高峰延迟是否稳定。满足这些的机场见 AI 工具机场推荐。
相关
常见问题
Codex 登录时浏览器显示授权成功,终端却一直等,怎么回事?
OAuth 的回调地址是 localhost 的一个端口,浏览器要把授权结果发回终端。代理客户端把 localhost 的请求也截走了就收不到。把 localhost 和 127.0.0.1 加进绕过列表,或者登录时临时关系统代理。
Codex CLI 报 fetch failed 或 ECONNREFUSED,是什么原因?
终端没有走代理。Codex 是 Node.js 程序,不读系统代理设置。在终端里设 HTTPS_PROXY 指向客户端的本地端口,或者开 TUN 模式。
浏览器能登录 ChatGPT,为什么 Codex 登录失败?
浏览器和终端走的可能不是同一个节点或同一个出口 IP。OAuth 登录过程中 IP 不一致会被拒。把 openai.com 相关域名固定到一个节点,让浏览器和终端走同一条路。
Codex 的 OAuth 回调端口被占用怎么办?
Codex 会监听一个本地端口等回调,被别的程序占了就起不来。关掉占用端口的程序,或者查看 Codex 的文档改回调端口。
公司网络下 Codex 完全连不上怎么办?
通常是防火墙没放行 openai.com,或者 TLS 拦截的证书 Node.js 不认。加公司根证书到 NODE_EXTRA_CA_CERTS,或者用自己的网络绕过公司代理。
本文为信息整理与个人经验,不构成购买建议。机场政策与软件界面可能变化,以官方为准。发现过期内容请 联系纠错。