curl代理失效时典型报错为“failed to connect to proxy.example.com port 8080: connection refused”或“proxy connect aborted”,根源是本地代理进程退出、端口占用或环境变量残留,需通过lsof/netstat检查进程、echo验证http_proxy变量、curl -v观察“proxy tunneling failed”提示,并用--noproxy "*"临时绕过。

代理服务中断时 curl 报错的典型表现
curl 在代理失效后常返回 Failed to connect to proxy.example.com port 8080: Connection refused 或更模糊的 Proxy CONNECT aborted。这不是目标服务器问题,而是本地代理进程已退出、端口被占用、或配置残留导致的连接失败。重点不是重试下载,而是快速识别并绕过/修复代理链。
- 检查代理是否真在运行:
lsof -i :8080(Linux/macOS)或netstat -ano | findstr :8080(Windows),确认对应 PID 是否存在 - 查看环境变量是否意外启用:
echo $HTTP_PROXY $HTTPS_PROXY(shell)或echo %HTTP_PROXY%(CMD),空值不等于未启用——HTTP_PROXY=(赋空字符串)仍会触发 curl 尝试连接空地址 -
curl -v @#@#@#@#@#@#@#@#@#@0的 verbose 输出里,第一行若出现* Proxy tunneling failed,基本可锁定代理层问题
临时禁用代理的可靠方式(跨平台)
硬编码禁用比依赖环境变量更可控。不同工具行为差异大,不能只靠删环境变量:
-
curl:加--noproxy "*"参数(注意引号防 shell 展开),它会忽略所有代理变量;或显式置空:curl --proxy "" @#@#@#@#@#@#@#@#@#@0 -
wget:用--no-proxy,但注意它不读NO_PROXY环境变量,必须显式传参 - Python
requests:构造 session 时传proxies={"http": None, "https": None},设为None才真正跳过,设为空字符串会尝试连http:// - npm/yarn:执行命令前加
npm config delete proxy && npm config delete https-proxy,仅改当前 shell 环境变量无效
代理配置残留引发的静默失败
很多工具(如 git、docker、pip)会缓存代理设置,重启终端也不清空:
-
git:运行git config --global --get http.proxy,若输出非空,用git config --global --unset http.proxy彻底删除 -
pip:检查pip config list,优先级高于环境变量;删除配置文件(如~/.pip/pip.conf)中[global]下的proxy行 - Docker Desktop for Mac/Windows:即使关掉“Use the Docker daemon proxy settings”,其内部 VM 可能仍保留旧配置,需重启 Docker 服务而非仅客户端
代理中断最麻烦的不是报错本身,而是某些工具(比如旧版 conda)会在超时后自动 fallback 到直连,但耗时长达 90 秒——你得等一分半才看到结果,期间无法判断是网络慢还是代理卡死。











