curl为何尝试连接localhost而非访问公网?问题排查与解决
解决 curl 强制连接 localhost 而非目标地址的问题
问题现象
你已经确认网络连接正常(ifconfig输出显示无线网卡wlp3s0获取到有效IP,且有正常的数据包收发),但执行curl命令时却出现连接127.0.0.1:8888被拒绝的错误:
user5@system5:~$ curl -L https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (7) Failed to connect to 127.0.0.1 port 8888: Connection refused gpg: no valid OpenPGP data found.
而之前curl是可以正常使用的,说明问题出在后续的配置变更上。
排查过程
- 排除hosts解析问题:检查
/etc/hosts内容,配置正常,没有把目标域名错误指向localhost:
127.0.0.1 localhost 127.0.1.1 system5.
- 排除DNS配置问题:
/etc/network/interfaces仅包含本地回环配置,无异常DNS设置,排除解析失败的可能。 - 检查系统代理配置:执行
env命令后发现http_proxy环境变量被设置为127.0.0.1——这就是核心问题:系统全局启用了HTTP代理,curl默认会遵循这个配置,尝试通过localhost的代理服务发起请求。
问题根源
你之前安装了Fiddler,虽然仅为Firefox单独配置了代理,但Fiddler同时修改了系统级的代理设置。当代理服务未运行或配置异常时,curl就会出现连接localhost被拒绝的错误。
解决方法
通过GNOME图形界面重置系统代理为无代理模式:
- 打开系统设置,进入网络选项下的网络代理页面
- 选择无模式,点击应用到系统全局
- 重启电脑后,
curl即可恢复正常直接请求目标地址。
内容的提问来源于stack exchange,提问作者SeaDude




