codex连接超时本质是客户端超时阈值与国内网络tls握手、初始化及流式响应节奏不匹配所致;需依次排查网络连通性、dns解析、端口可达性,再调整codex_request_timeout和codex_stream_timeout超时参数,或降级为http协议、释放1455端口、验证代理可用性。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

codex连接超时不是单纯的网络问题,而是客户端默认超时阈值与国内真实网络路径的TLS握手延迟、上下文初始化耗时、流式响应节奏不匹配导致的协议级误判——实测中curl能820ms返回完整JSON,但codex list却稳定超时,根源在于Node.js HTTP客户端对首字节响应(TTFB)和chunk分发间隔的容忍度远低于实际波动特征。
确认是否真为网络连通问题
先排除基础链路中断:执行ping -c 5 api.openai.com,观察packet loss是否为0、平均RTT是否低于300ms;若丢包率>5%或RTT>500ms,说明物理层已不稳定,需切换网络或检查路由器。
再验证DNS解析是否正常:nslookup api.openai.com,确认返回IP地址且非127.0.0.1或0.0.0.0;若解析失败,立即修改系统DNS为114.114.114.114或8.8.8.8。
最后测试端口可达性:curl -I https://api.openai.com --max-time 10,返回HTTP/2 401表示443端口通、TLS可协商;若报Connection refused或Timeout,才需怀疑代理或防火墙拦截。
调整Codex超时参数(最有效)
方法一:延长请求总超时
执行export CODEX_REQUEST_TIMEOUT=120000,将超时从默认30秒提升至120秒;该变量必须在codex命令执行前生效,否则无效。
方法二:同步延长流式超时
【关键】流式响应超时独立于请求超时,必须额外设置:export CODEX_STREAM_TIMEOUT=180000;若只调大前者,长任务仍会在30秒后中断并报Stream timeout No data received for 30000ms。
方法三:永久写入Shell配置
执行echo 'export CODEX_REQUEST_TIMEOUT=120000' >> ~/.zshrc && echo 'export CODEX_STREAM_TIMEOUT=180000' >> ~/.zshrc && source ~/.zshrc,避免每次新开终端重复设置。
强制降级HTTP协议(绕过WebSocket故障)
第一步:打开~/.codex/config.toml
第二步:在文件最顶部(任何[xxx]段落之前)添加model_provider = "openai_http",注意【必须顶格、无缩进】,否则配置解析失败。
第三步:在文件末尾新增段落:
[model_providers.openai_http]name = "OpenAI HTTP only"wire_api = "responses"supports_websockets = false
这一步禁用WebSocket后,所有请求转为传统HTTP POST,彻底规避心跳超时、连接重置等流式协议特有故障。
检查并释放被系统占用的1455回调端口
① 管理员身份运行PowerShell,执行netsh interface ipv4 show excludedportrange protocol=tcp
② 查看输出中是否包含1359-1458区间;若存在,说明Windows已将1455端口列入排除列表,Codex登录回调服务无法启动。
③ 执行net stop winnat && net start winnat重启WinNAT服务,系统会重新分配排除端口,1455大概率被释放。
④ 不需重启电脑,直接运行codex login验证——若浏览器跳转后页面显示Cannot GET /callback,说明服务已启动;若仍报ERR_CONNECTION_REFUSED,则端口未释放成功,需重复步骤③。
验证代理端口是否真实可用
打开终端,运行lsof -i :7890(macOS/Linux)或netstat -ano | findstr :7890(Windows),确认输出含LISTEN状态;若无结果,代理工具未监听该端口。
运行测试命令:curl -x http://127.0.0.1:7890 https://api.openai.com/v1/models -I --max-time 10;只要返回HTTP状态码(如200或401),即证明代理链路通畅。
注意:代理地址必须用http://前缀,即使代理本身是SOCKS5协议——Codex仅支持HTTP代理格式,填socks5://会导致静默失败。











