Skip to content

About

一键修复 Codex 一直 reconnecting / 回复慢:自动探测可用的 HTTP 代理端口并写入 ~/.codex/.env,强制 WebSocket 流量走代理。Windows + macOS/Linux 双脚本。

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

codex-proxy-fix

Codex 一直 reconnecting?回复慢得离谱?一条命令解决。

自动探测你本机可用的 HTTP 代理端口,写入 ~/.codex/.env,强制 Codex 的所有流量(包括 WebSocket)都走 HTTP/HTTPS 代理端口。

English · MIT License


问题是什么

Codex 现在的数据传输不再走普通的 HTTP/HTTPS,全部升级到了 WebSocket。

而大部分人的代理节点只代理 HTTP/HTTPS 流量,WebSocket 连不通。于是:

Codex 尝试 WebSocket → 失败
      → 重试 → 失败 → 重试 → 失败 → 重试 → 失败 → 重试 → 失败
      → 5 次之后才降级回 HTTPS

这一轮试探就是你看到的 「正在重新连接 / reconnecting」,以及一个简单问题要等好几分钟的根本原因。切节点没用,因为问题不在节点,在于流量根本没被送进代理。

解决办法

Codex 启动时会读取 $CODEX_HOME/.env(默认 ~/.codex/.env)里的环境变量。往里面写死代理配置,让 Codex 的每一条连接——包括 WebSocket——都通过你本机的 HTTP 代理端口出去:

HTTP_PROXY=http://127.0.0.1:7897
HTTPS_PROXY=http://127.0.0.1:7897
ALL_PROXY=http://127.0.0.1:7897
NO_PROXY=localhost,127.0.0.1,::1

麻烦的地方在于:你得知道自己代理软件的 HTTP 端口到底是几。Clash Verge 默认 7897,老版 Clash 是 7890,v2rayN 是 10809,各家都不一样;而且很多人误填了 SOCKS5 端口,填完照样不通。

这个脚本就是来干这件事的:自动扫、自动测、自动写。

用法

Windows(PowerShell)

iwr -useb https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.ps1 -OutFile "$env:TEMP\fix-codex.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\fix-codex.ps1"

macOS / Linux / WSL

curl -fsSL https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.sh | bash

跑完之后 完全退出 Codex 再重新启动(关窗口不算,要彻底结束进程),然后随便问一句试试。

习惯先看代码再执行的话,git clone 下来直接跑本地文件就行,脚本只有一个文件、无依赖。

它到底做了什么

  1. 找代理端口,按这个顺序:命令行参数 → 当前环境变量 → 系统代理设置(Windows 注册表 / macOS scutil / GNOME gsettings)→ 扫描 17 个常见端口。

  2. 逐个实测:向每个候选端口发一个真实的 HTTP CONNECT chatgpt.com:443,只有能成功打通隧道的才算数。 这一步会自动把 SOCKS5 端口筛掉——它们过不了 HTTP CONNECT,而这正是很多人「明明配了代理还是 reconnecting」的原因。

  3. 写入 ~/.codex/.env,配置放在一个带标记的块里:

    # >>> codex-proxy-fix >>>
    ...
    # <<< codex-proxy-fix <<<
    

只碰这一个文件,而且:

  • 改动前自动备份成 .env.bak.20260812-174300
  • 你原有的其它变量原样保留
  • 块外冲突的旧代理变量会被注释掉(不是删掉),卸载时自动还原
  • 重复运行是幂等的,不会越写越多
  • 不动 config.toml,不碰你的模型、插件、项目信任设置

常用参数

PowerShell Bash 说明
-Check --check 只体检,不改任何文件
-Port 7890 --port 7890 手动指定端口,跳过自动探测
-ProxyUrl http://127.0.0.1:7897 --proxy http://127.0.0.1:7897 指定完整代理地址(可含账号密码)
-Uninstall --uninstall 移除配置,还原被注释的行
-Yes --yes / -y 不询问直接写入
-CodexHome <path> --codex-home <path> 自定义 Codex 配置目录

先体检看看情况:

.\fix-codex.ps1 -Check
./fix-codex.sh --check

常见问题

「没有发现任何本地代理端口」 代理软件没开,或者用的是 TUN/透明代理模式没暴露本地端口。打开代理软件,在设置里找到 HTTP 端口(Clash 系叫「混合端口 / Mixed Port」),然后 --port 手动指定。

「发现了监听中的端口,但没有一个能完成 HTTP CONNECT」 八成是扫到的都是 SOCKS5 端口。去代理软件里确认 HTTP / 混合端口的数字,手动指定。也可能是节点本身就不通——先用浏览器验证一下代理能不能正常上网。

改完还是 reconnecting? 先确认 Codex 是彻底重启了的:.env 只在进程启动时读一次,关个窗口不生效。再跑一次 --check 确认配置写进去了。如果代理是 HTTP/1.1 的老实现、不支持 WebSocket 升级,就得换个支持的客户端。

想还原? -Uninstall / --uninstall。或者直接删掉 ~/.codex/.env 里那对 # >>> codex-proxy-fix >>> 标记之间的内容,也可以从 .env.bak.* 备份恢复。

会泄露我的密钥吗? 脚本只往 .env 写代理地址,不读 auth.json,不联网上传任何东西。唯一的网络行为是向你本机的候选端口发 CONNECT chatgpt.com:443 探测连通性。

兼容性

  • Windows — Windows PowerShell 5.1 及以上,无需管理员权限
  • macOS / Linux / WSL — Bash 4+,有 curl 更好(没有会退回裸 socket 探测)
  • 对 Clash / Clash Verge / Mihomo / v2rayN / Shadowsocks / sing-box / Surge / Quantumult 等都适用,只要它提供 HTTP 或混合端口

English

Codex stuck on reconnecting? Painfully slow replies? One command fixes it.

Codex moved its transport to WebSocket. Most proxy nodes only tunnel plain HTTP/HTTPS, so Codex retries the WebSocket handshake five times before falling back to HTTPS — that retry loop is the "reconnecting" spinner and the multi-minute wait for a trivial question.

The fix is to write proxy environment variables into $CODEX_HOME/.env so every Codex connection, WebSocket included, goes through your local HTTP proxy port. The hard part is knowing which port that is — this script finds it for you.

It probes candidate ports with a real HTTP CONNECT chatgpt.com:443, so SOCKS5-only ports get ruled out automatically (a very common cause of "I set a proxy and it still doesn't work"). Then it writes a marked block into ~/.codex/.env, backing up the file first and leaving everything else untouched. -Uninstall / --uninstall reverts it.

# Windows
iwr -useb https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.ps1 -OutFile "$env:TEMP\fix-codex.ps1"; powershell -ExecutionPolicy Bypass -File "$env:TEMP\fix-codex.ps1"
# macOS / Linux / WSL
curl -fsSL https://raw.githubusercontent.com/SAGIRIxr/codex-proxy-fix/main/fix-codex.sh | bash

Fully quit and restart Codex afterwards — .env is read once at process start.

Flags: --check (diagnose only), --port N, --proxy URL, --uninstall, --yes, --codex-home PATH.


License

MIT

About

一键修复 Codex 一直 reconnecting / 回复慢:自动探测可用的 HTTP 代理端口并写入 ~/.codex/.env,强制 WebSocket 流量走代理。Windows + macOS/Linux 双脚本。

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages