浏览器能上网,终端和 Git 不通?先检查代理入口
Windows 浏览器正常但 curl、Git、包管理器连接超时,常见原因是命令行没有读取用户系统代理。本文给出显式代理和环境变量的最小排查法。
先看重点先确认 Clash 当前 mixed-port,再用 curl --proxy 显式测试;成功后只给需要的工具配置 http_proxy/HTTPS_PROXY 或工具自己的代理,不要直接把全机 WinHTTP 永久改掉。
浏览器已经能访问,PowerShell 里的 curl、Git 或包管理器却一直超时,这并不矛盾。浏览器可能读取了 Windows 用户代理,命令行工具则可能只认自己的配置、环境变量或 WinHTTP。
先证明“显式走代理”能不能通,再决定改哪一个工具。 不要因为终端失败就切节点、重装 Clash 或全局重置网络。
如果你还不确定系统代理与 TUN 各自能覆盖哪些程序,先看系统代理和 TUN 的选择边界;本文只处理命令行入口。
先找到客户端真正监听的端口
Mihomo 的 mixed port 同时支持 HTTP(S) 和 SOCKS5。Clash Verge Rev 常见端口可能是 7897,其他客户端或旧配置也可能是 7890,不能照抄文章里的数字。
在客户端设置里找“混合代理端口”或 mixed-port,并确认内核正在运行。然后用实际端口做一次临时请求:
curl.exe --proxy http://127.0.0.1:7897 https://example.com/
能返回页面说明节点、本地端口和 curl 的显式代理链路都正常。此时问题只剩“平时没有把代理告诉这个工具”。如果这里也拒绝连接,先核对端口和客户端状态;若连接建立但目标超时,再换节点或目标测试。
临时环境变量比改全机设置更容易撤销
curl 官方文档支持按协议读取 http_proxy、HTTPS_PROXY 和 ALL_PROXY。在当前 PowerShell 窗口临时设置:
$env:http_proxy = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
关闭这个终端窗口,临时变量就消失。先用这种方式确认 Git、npm 或其他命令是否恢复,比一开始写进系统环境变量安全得多。
SOCKS5 还要区分域名在哪边解析。curl 的 socks5h:// 会让代理侧处理主机名,socks5:// 默认由本地解析;遇到本地 DNS 异常时,两者结果可能不同。普通用户优先使用客户端明确提供的 HTTP/mixed 端口即可。
Git 和包管理器可能还有自己的配置
有些工具会优先读取自身配置。若环境变量测试成功,再查该工具官方文档,给它单独设置代理。这样只影响目标工具,不会把 Windows Update、企业服务或其他程序一起改掉。
排查时也要查看旧配置:以前写入的代理可能仍指向已经不用的 7890,而当前客户端监听 7897。这种情况下“有代理配置”反而是失败原因。
为什么不建议直接导入 WinHTTP
Microsoft 的 netsh winhttp import proxy source=ie 会把用户代理导入 WinHTTP,但 WinHTTP 供一类系统组件和服务使用,不等于“给当前 Git 命令加个代理”。在个人终端工具的问题上,它的影响范围通常过大。
只有你明确知道目标程序使用 WinHTTP,并理解企业策略影响时,才检查或修改它。大多数情况下,显式 --proxy、当前会话环境变量,或者工具自己的代理字段已经够用。
按测试结果继续定位
| 测试结果 | 更可能的问题 |
|---|---|
浏览器通,显式 --proxy 也通 |
工具没有代理配置 |
| 浏览器通,显式代理拒绝连接 | 端口写错或内核未监听 |
| 显式代理能连本地端口但目标超时 | 节点、规则或目标站问题 |
| 终端直连也通,只是某个工具失败 | 工具自身证书、仓库或配置问题 |
修复后保留最小范围:只让确实需要的工具使用代理,并记下如何清除。客户端端口一旦更改,相应环境变量或工具配置也要一起更新。
NO_PROXY 也可能让目标被意外直连
curl 官方支持 NO_PROXY,其中列出的主机或网段会绕过代理;值为 * 时会匹配全部主机。团队脚本、开发环境或旧工具可能已经设置这个变量,导致你明明写了 HTTPS_PROXY,目标仍然直连。
排查时查看当前会话变量,不要在截图中公开带认证信息的代理 URL:
Get-ChildItem Env: | Where-Object Name -Match 'PROXY'
临时清除某一项可以只作用于当前 PowerShell:
Remove-Item Env:NO_PROXY -ErrorAction SilentlyContinue
不要照抄后永久删除公司内网需要的绕过列表。先记下原值,完成一次对照后恢复。
DNS 解析位置也会改变结果
HTTP 代理和 socks5h 可以让代理端解析目标域名,而 socks5 等用法可能先在本地解析。于是浏览器通过代理侧 DNS 正常,终端却因本地 DNS 失败而报找不到主机。
用显式 HTTP mixed-port 成功、直连解析失败时,应记录为 DNS 路径差异,不要写成 Git 或 curl 不支持代理。反过来,域名已经解析、连接却超时,应继续查节点和路由。
持久配置应写在哪里
只在偶尔拉取代码时使用代理,保留一条临时命令或会话变量即可。每天都需要的工具,再使用其官方配置文件;不要同时在系统环境、用户环境、Git 和包管理器四处重复设置。
持久化后立即记录清除方式,并在客户端关闭时验证失败表现可理解。一个隐蔽的旧代理地址,往往比没有配置更难排查。
资料来源
以下来源于 2026/8/8 复核。版本、支持平台和发布状态以后续官方页面为准。
持续更新
收到新教程,也欢迎纠错
想收到新文章,可以关注 TG 频道;发现下载失效、套餐变化或步骤不一致,请附上页面链接和可公开的截图。不要发送订阅链接、密码或完整账户信息。
读者互动
这篇内容对你有帮助吗?
最新评论
- 正在加载评论……