浏览器能上网,命令行却失败:检查应用自己的代理设置
摘要:从本地监听端口、进程环境变量和Git配置入手,解释浏览器与终端连接结果不同的原因。
同一台电脑上,浏览器能打开网页,终端下载却超时,未必是节点突然失效。不同应用读取代理设置的方式可能不同:浏览器还可能安装了代理扩展,而命令行工具有自己的参数和环境变量。排查时应先确认失败工具是否连接了预期入口,避免一上来就更换整套配置。
先确认本地入口
打开客户端设置,记下HTTP或混合端口的实际值,并确认客户端正在运行。终端里填写的回环地址指向终端所在设备;如果命令运行在容器、远程服务器或另一台电脑,它通常不会指向桌面上的客户端。先辨明命令运行位置,再讨论节点是否可用。
可以用curl的--proxy为单次请求明确指定代理,配合--max-time限制等待时间。测试目标选不需要登录的公开HTTPS页面,检查预期内容和状态,不要用带Cookie的业务请求代替基础连通性检查。参数手册列出了这些选项;端口应按本机设置填写。
检查环境变量的作用范围
curl会读取https_proxy、ALL_PROXY等变量,也可能因NO_PROXY而绕过代理。协议专用变量优先于ALL_PROXY,HTTP代理变量还有大小写限制,不能认为每种拼写都等价。官方说明解释了优先关系。
只查看与代理有关的变量即可,不要把整份环境变量贴到论坛,里面可能有密钥。新打开的终端与早先启动的编辑器可能继承不同环境;修改设置后,应确认实际执行命令的进程收到什么值。对比时保留原值,一次只改一个因素。
Git还要核对自己的配置
Git的HTTP传输可使用http.proxy,它会覆盖通常来自环境变量的代理设置。配置文档对此有明确说明。使用SSH地址的仓库则不能直接套用这套HTTP配置判断。
临时诊断可通过git的-c参数只给当前命令传入配置,先验证再决定是否长期保存,避免测试值残留在全局设置。命令文档说明了参数作用。若入口已正确而仍失败,再区分解析、握手与目标响应阶段;把具体错误和运行环境记下来,通常比反复重启客户端更有帮助。