视频加载失败

临时清除代理环境变量:让命令行程序临时直连网络

1776 字
9 分钟
临时清除代理环境变量:让命令行程序临时直连网络

临时清除代理环境变量:让命令行程序临时直连网络#

有时候一个命令行程序明明网络本身没问题,却一直连接失败、超时,或者走到了不该走的代理节点。常见原因之一是:当前终端继承了 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY 等代理环境变量。

这篇文章整理一个实用小技巧:只在当前终端窗口里临时清除代理环境变量,不改系统代理设置,也不影响其他终端窗口。适合用来排查 GA、Python 脚本、Node 工具、Git/CLI 工具的网络问题。


什么时候需要这样做?#

你可以在这些场景下尝试临时清代理:

  1. 某个 CLI 程序总是连接到错误代理。
  2. 程序报 connection refused、proxy error、timeout,但直连网络其实可用。
  3. 你想判断问题到底来自程序本身,还是来自终端里的代理环境变量。
  4. 同一台机器上,浏览器能访问,但命令行工具访问失败。
  5. 启动 GA、Python 脚本或开发服务时,希望它们临时不继承代理。

先检查当前终端是否存在代理变量:

Terminal window
env | grep -i proxy

如果能看到类似下面的输出,就说明当前 shell 环境里确实设置了代理:

HTTP_PROXY=http://127.0.0.1:7890
HTTPS_PROXY=http://127.0.0.1:7890
ALL_PROXY=socks5://127.0.0.1:7890

macOS / Ubuntu / Linux:当前终端临时清除#

如果你使用的是 bash 或 zsh,可以执行:

Terminal window
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
unset http_proxy https_proxy all_proxy
unset NO_PROXY no_proxy

如果不想影响当前 shell 里的变量,只想让某一条命令单次不走代理,也可以用 env -u 配合 NO_PROXY='*' 一次性搞定,比如启动 ga-tui2:

Terminal window
cd /Users/a11/2026/2026511-611/GenericAgent
env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \
-u http_proxy -u https_proxy -u all_proxy \
NO_PROXY='*' no_proxy='*' \
ga-tui2

经过我的验证,这个指令能更彻底地清理代理,包括 ga 里面模型调用那一层的网络代理。

然后检查是否清掉:

Terminal window
env | grep -i proxy

如果没有输出,说明当前终端里的代理环境变量已经清空。

接着在这个终端里启动你的程序,例如:

Terminal window
ga

或:

Terminal window
python3 main.py

注意:这个操作只影响当前终端会话。关闭终端之后,系统配置不会被修改;重新打开一个终端,也可能重新读取 shell 配置里的代理设置。


macOS / Ubuntu:单次启动某个程序不走代理#

有时你不想改变当前 shell,只想让某一个命令在启动时不继承代理环境变量,可以使用 env -u:

Terminal window
env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \
-u http_proxy -u https_proxy -u all_proxy \
-u NO_PROXY -u no_proxy \
ga

如果启动的是 Python 程序:

Terminal window
env -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \
-u http_proxy -u https_proxy -u all_proxy \
-u NO_PROXY -u no_proxy \
python3 main.py

这种方式的好处是:只影响这一条命令。命令结束后,当前终端原本的环境变量仍然保留。


Windows:不要只删代理变量,关键是设置 NO_PROXY=*#

Windows 这里有一个很容易踩坑的点:只删除 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 等环境变量,并不一定能让 Python、GA 或某些 CLI 直连。

原因是 Windows 还有“系统代理”这一层。有些库(例如 Python urllib / requests 相关链路)在环境变量被删掉后,仍可能从 Windows 系统代理里读到类似 127.0.0.1:7897 的代理配置。

刚刚实测结果是:

  • 只删除 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY:仍可能读取 Windows 系统代理 127.0.0.1:7897。
  • 设置 NO_PROXY=* / no_proxy=* 后:urllib.getproxies() 不再返回系统代理。
  • GA / Python 请求会尝试直连;如果直连失败,反而说明它确实没有再走代理。

所以在 Windows 上,如果目标是“不改全局 Windows 系统代理,只让当前终端或当前 GA 会话尽量直连”,推荐设置 NO_PROXY=*。


Windows PowerShell:当前窗口之后都尽量直连#

如果你已经在一个 PowerShell 终端里,希望这个终端之后启动的所有程序都不走系统代理,可以执行:

Terminal window
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue
$env:NO_PROXY='*'
$env:no_proxy='*'

然后再运行:

Terminal window
ga

或者:

Terminal window
python main.py

注意:这里不是删除 NO_PROXY,而是把它设置成 *。这通常表示“所有目标都不走代理”。


Windows PowerShell:只让这一次 GA 启动直连#

如果你只想启动一个临时的 GA 会话,不想影响别的 PowerShell 窗口,可以这样启动:

Terminal window
powershell -NoProfile -Command "Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue; $env:NO_PROXY='*'; $env:no_proxy='*'; ga"

更短版本是:

Terminal window
powershell -NoProfile -Command "$env:NO_PROXY='*'; $env:no_proxy='*'; ga"

如果启动的是 Python 程序,也可以写成:

Terminal window
powershell -NoProfile -Command "Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue; $env:NO_PROXY='*'; $env:no_proxy='*'; python main.py"

这些命令只影响当前 PowerShell 进程以及它启动的子进程,不会关闭 Windows 全局系统代理。浏览器如果不是从这个终端启动,一般也不会受影响。


Windows PowerShell:做一个 ga-direct 别名#

如果经常需要让 GA 尽量直连,可以在 PowerShell 里建一个函数:

Terminal window
function ga-direct {
Remove-Item Env:HTTP_PROXY, Env:HTTPS_PROXY, Env:ALL_PROXY, Env:http_proxy, Env:https_proxy, Env:all_proxy -ErrorAction SilentlyContinue
$env:NO_PROXY='*'
$env:no_proxy='*'
ga
}

之后输入:

Terminal window
ga-direct

即可让这个 GA 会话尽量直连、不走系统代理。


Windows CMD:同样要设置 NO_PROXY=*#

如果你使用的是 CMD,也不要只把代理变量清空;建议同时设置 NO_PROXY=*:

Terminal window
set HTTP_PROXY=
set HTTPS_PROXY=
set ALL_PROXY=
set http_proxy=
set https_proxy=
set all_proxy=
set NO_PROXY=*
set no_proxy=*

然后启动:

Terminal window
ga

或者:

Terminal window
python main.py

单次启动可以写成一行:

Terminal window
cmd /C "set HTTP_PROXY=& set HTTPS_PROXY=& set ALL_PROXY=& set http_proxy=& set https_proxy=& set all_proxy=& set NO_PROXY=*& set no_proxy=*& ga"

不是所有软件都尊重 NO_PROXY=*,但 Python requests / urllib 这一类通常会尊重;刚刚已经在 GA 当前 Python 环境里验证过。


两个重要提醒#

1. 已经启动的程序不会受影响#

环境变量是在程序启动时继承的。也就是说,如果 GA、Python 服务或某个开发服务器已经在运行,你在另一个终端里清代理,并不会改变它们的网络行为。

正确做法是:

  1. 退出已经启动的程序。
  2. 在清掉代理变量后的终端里重新启动。
  3. 再观察问题是否复现。

2. 清环境变量不等于关闭所有代理#

这些命令只清除环境变量层面的代理。

如果你使用的是 Clash、V2RayN、Surge、TUN 模式、全局 VPN、公司 VPN,或者系统级网络接管,那么清除 HTTP_PROXY / HTTPS_PROXY / ALL_PROXY 可能还不够。此时需要到代理软件里切换规则,例如设置 DIRECT,或者临时关闭 TUN / 全局代理。


建议的排查顺序#

遇到 CLI 网络异常时,可以按下面顺序判断:

  1. env | grep -i proxy 或 gci env:*proxy*,确认当前环境有没有代理变量。
  2. macOS / Linux 先临时清掉当前终端代理变量;Windows 还要设置 NO_PROXY=* / no_proxy=*。
  3. 在同一个终端里重新启动程序。
  4. 如果问题消失,说明原先很可能是环境变量代理导致。
  5. 如果问题仍然存在,再检查系统代理、代理软件、DNS、目标服务状态或程序配置。

这个方法的优点是可逆、低风险、不会改系统设置,非常适合做第一步网络排查。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

临时清除代理环境变量:让命令行程序临时直连网络
https://blog.caishu.site/posts/temporary-clear-proxy-env-2026-06-29/
作者
皮耶罗
发布于
2026-06-29
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
皮耶罗
在超市后门,和喜欢的故事一起短暂放空。
公告
这里记录了技术探索、日常反思和开源旅程。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
59
分类
16
标签
237
总字数
121,121
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录