📍 你遇到的问题:浏览器能打开,AI CLI 却无法登录

如果你在中国大陆网络环境下使用 Gemini CLI、Codex CLI 或 Claude Code CLI,可能会遇到这种情况:浏览器可以正常打开 Google、ChatGPT、Claude,但在终端里运行 CLI 时却登录失败、一直转圈、请求超时、反复重连,或者提示 User location is not supported

这通常不是账号坏了,也不一定是软件坏了。更常见的原因是:你的浏览器走了代理,但终端里的 CLI 没有走代理。很多代理软件只会让浏览器自动使用代理,终端命令不会自动跟着走。

这篇教程会一步一步教你检查代理端口、设置终端代理、测试网络是否成功,并分别说明 Gemini CLI、Codex CLI、Claude Code 应该怎么配置。


✅ 先看结论:大多数人这样设置就可以

如果你只是想尽快让 CLI 能用,可以先按照下面这个思路处理:

  • 先打开 Clash、v2rayN、Shadowrocket、Surge 等代理软件。
  • 找到软件里的 HTTP 代理端口mixed 端口,常见是 78901080810809
  • 在终端里设置 HTTP_PROXYHTTPS_PROXYNO_PROXY
  • 重新运行 geminicodexclaude
  • 如果仍然失败,再开启代理软件的 TUN 模式增强模式

最重要的一点是:浏览器能打开网站,不代表 CLI 一定能联网。CLI 是在终端里运行的,需要单独确认它有没有走代理。


🧠 为什么浏览器能用,终端不能用?

很多代理软件开启后,会自动设置“系统代理”。浏览器通常会读取系统代理,所以网页能正常打开。但是 Gemini CLI、Codex CLI、Claude Code 这类命令行工具运行在终端里,它们不一定会自动读取系统代理。

终端程序通常更依赖这些环境变量:

  • HTTP_PROXY:让 HTTP 请求走代理。
  • HTTPS_PROXY:让 HTTPS 请求走代理。
  • ALL_PROXY:让更多类型的请求走代理,不一定所有 CLI 都适合。
  • NO_PROXY:告诉系统哪些地址不要走代理,例如 localhost127.0.0.1

NO_PROXY 很重要。很多 AI CLI 登录时会在本机打开一个回调地址,如果把本机地址也代理出去,可能出现“浏览器登录成功,但 CLI 还是收不到登录结果”的情况。


🔌 第一步:找到你的本地代理端口

不要直接照抄别人的端口。不同软件、不同版本、不同配置,端口都可能不一样。请打开你的代理软件,在设置里找 HTTP 代理端口mixed 端口

常见端口只是参考:

  • Clash / Clash Verge / Mihomo 常见端口:78907897
  • v2rayN 常见 HTTP 端口:10808108091081
  • Shadowrocket / Surge / 其他代理软件:以软件界面显示的 HTTP 端口为准

如果你的代理软件显示 HTTP 端口是 7890,那么后面的命令就使用 127.0.0.1:7890。如果你的端口不是 7890,请把命令里的 7890 改成你自己的端口。

注意:即使变量名叫 HTTPS_PROXY,本地地址通常也写成 http://127.0.0.1:7890,不要写成 https://127.0.0.1:7890


🪟 Windows 设置方法

如果你使用 Windows,请打开 PowerShell,复制下面命令。这里以端口 7890 为例:

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

然后在同一个 PowerShell 窗口里运行你要使用的 CLI:

gemini
codex
claude

这些设置只对当前 PowerShell 窗口生效。关闭窗口后会失效,这是正常的。如果你重新打开终端,需要重新设置一次。


🍎 macOS / Linux 设置方法

如果你使用 macOS 或 Linux,请打开终端,复制下面命令。这里以端口 7890 为例:

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

然后在同一个终端窗口里运行:

gemini
codex
claude

这些设置也只对当前终端窗口生效。如果你关闭终端再重新打开,需要重新执行一次。


🧪 第二步:测试代理是否真的成功

设置代理后,可以先用下面的命令测试网络。不要急着直接登录 CLI,先确认终端能连到官方接口。

Windows PowerShell:

curl.exe -I https://api.openai.com
curl.exe -I https://api.anthropic.com
curl.exe -I https://generativelanguage.googleapis.com

macOS / Linux:

curl -I https://api.openai.com
curl -I https://api.anthropic.com
curl -I https://generativelanguage.googleapis.com

如果返回 401403404,不一定是坏事,通常说明已经连到服务器,只是没有登录或没有权限。真正需要排查的是这些错误:

  • timeout
  • connection refused
  • could not resolve host
  • network unreachable

如果出现这些错误,说明终端代理还没有配置成功,或者你的代理端口写错了。


🤖 Gemini CLI 设置建议

Gemini CLI 可以读取 ~/.gemini/.env 文件。如果你经常使用 Gemini CLI,建议把代理写进这个文件,这样不用每次手动输入命令。

创建或编辑这个文件:

~/.gemini/.env

写入:

HTTP_PROXY=http://127.0.0.1:7890
http_proxy=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
https_proxy=http://127.0.0.1:7890
NO_PROXY=localhost,127.0.0.1,::1

如果你的端口不是 7890,请改成自己的端口。保存后重启终端,再运行:

gemini

💬 Claude Code 设置建议

Claude Code 支持 HTTP_PROXYHTTPS_PROXYNO_PROXY 这些标准代理变量。需要特别注意:Claude Code 不支持 SOCKS 代理。如果你的代理软件同时提供 HTTP 和 SOCKS 端口,请使用 HTTP 端口。

临时运行可以这样写:

HTTPS_PROXY=http://127.0.0.1:7890 \
HTTP_PROXY=http://127.0.0.1:7890 \
NO_PROXY=localhost,127.0.0.1,::1 \
claude

也可以写入 Claude Code 的设置文件:

~/.claude/settings.json
{
  "env": {
    "HTTP_PROXY": "http://127.0.0.1:7890",
    "HTTPS_PROXY": "http://127.0.0.1:7890",
    "NO_PROXY": "localhost,127.0.0.1,::1"
  }
}

保存后重启终端或 Claude Code。如果仍然失败,请确认代理软件里有没有 HTTP 端口,而不是只开了 SOCKS 端口。


🧩 Codex CLI 设置建议

Codex CLI 对网络连接比较敏感。如果你看到反复重连、WebSocket 失败、stream disconnected before completion,优先尝试 HTTP 代理端口,不要优先使用 SOCKS5。

临时运行可以这样写:

HTTP_PROXY=http://127.0.0.1:7890 \
HTTPS_PROXY=http://127.0.0.1:7890 \
NO_PROXY=localhost,127.0.0.1,::1 \
codex

如果你经常使用 Codex CLI,可以尝试创建这个文件:

  • macOS / Linux:~/.codex/.env
  • Windows:C:\Users\你的用户名\.codex\.env

写入:

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

保存后重启 Codex CLI,再测试:

codex doctor --summary --ascii --no-color

如果仍然反复重连,可能是旧的 Codex 后台进程还在使用旧配置。可以关闭相关终端、退出 Codex 应用,必要时重启电脑后再试。


🛜 什么时候需要开启 TUN 模式?

如果你已经设置了 HTTP_PROXYHTTPS_PROXY,但 CLI 还是有一部分请求失败,可以尝试开启代理软件里的 TUN 模式增强模式虚拟网卡模式

TUN 模式的作用是让更多软件流量被代理软件接管。它适合这些情况:

  • 你已经设置环境变量,但 CLI 仍然连不上。
  • 浏览器授权成功,但终端里还是显示登录失败。
  • VS Code 插件、IDE 插件、WebSocket 或后台请求不稳定。

在 Clash Verge、Mihomo、v2rayN 等软件里,相关名称可能叫 TUN Mode、Enhanced Mode、Service Mode、Auto Route、DNS Hijack、虚拟网卡模式。Windows 通常需要管理员权限。

如果开启 TUN 后影响了公司内网、局域网设备、Docker、WSL、游戏或 SSH,可以先关闭 TUN,改用前面的终端代理变量方式。


🖥️ WSL 用户特别注意

如果你在 Windows 上开了 Clash 或 v2rayN,但在 WSL 里运行 Gemini、Codex 或 Claude,WSL 里的 127.0.0.1 不一定是 Windows 主机。

这时可能需要把代理地址改成 Windows 主机在 WSL 里可访问的 IP,例如:

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

每台电脑的 IP 可能不同,可以用 ip routecat /etc/resolv.conf 查看。设置前最好先测试端口能不能连通。


⚠️ 常见错误

  • HTTPS_PROXY 写成 https://127.0.0.1:7890:大多数本地代理端口应该写 http://
  • 忘记设置 NO_PROXY:可能导致浏览器登录成功,但 CLI 收不到本地回调。
  • 照抄别人的端口:端口必须看你自己的代理软件设置。
  • 设置后不重启终端:旧终端窗口或旧后台进程可能还在使用旧配置。
  • 优先使用 SOCKS5:Claude Code 不支持 SOCKS;Codex 在某些场景下使用 HTTP 代理更稳定。
  • 把所有错误都当成网络问题:如果已经连到服务器,但提示额度、付款、地区、账号权限,那就需要检查账号状态,而不是继续改代理。

🔐 安全提醒

  • 不要把账号密码、验证码、API Key、Token 发给别人。
  • 如果需要截图求助,请先遮住邮箱、密钥、验证码、订单号等敏感信息。
  • 不要随便运行陌生人发来的脚本。本文里的命令只是在当前终端设置代理变量,不会修改你的账号。

📝 总结

Gemini CLI、Codex CLI、Claude Code 无法登录或无法联网时,最常见原因是:浏览器走了代理,但终端没有走代理

解决顺序建议是:先找到代理端口,再设置 HTTP_PROXYHTTPS_PROXYNO_PROXY,然后用 curl 测试,最后再运行 CLI。

如果普通环境变量仍然解决不了,再开启 TUN / 增强模式。这样排查最稳,也最不容易把电脑网络设置弄乱。


🔗 参考资料