curl 将所有非 SSL URL 解析为 127.0.0.1 和端口 8080

curl 将所有非 SSL URL 解析为 127.0.0.1 和端口 8080

我正在执行 curl,无论我将其指向哪个 URL,它总是尝试连接到 127.0.0.1 和端口 8080:

$ curl -v http://asdfsafzsdfsdf/
*   Trying 127.0.0.1...
* connect to 127.0.0.1 port 8080 failed: Connection refused
* Failed to connect to localhost port 8080: Connection refused
* Closing connection 0
curl: (7) Failed to connect to localhost port 8080: Connection refused

在上面的例子中,我使用了一个不存在的域“asdfsafzsdfsdf”,但对于像 google.com 这样的现有域,也会发生同样的情况。

但是,如果我将其指向如下 SSL URLhttps://google.com,它解析并执行请求。此外,如果我将其指向https://asfasdfasdfdasfd,它尝试解析它但失败了(没有奇怪的 127.0.0.1:8080 解析):

$ curl -v https://asdfsadfsafsdf
* Rebuilt URL to: https://asdfsadfsafsdf/
* Could not resolve host: asdfsadfsafsdf
* Closing connection 0
curl: (6) Could not resolve host: asdfsadfsafsdf

这表明,在建立 SSL 连接时可能不会发生“某种”形式的干扰(也许它们无法被导致这种情况的任何东西缓存,或者其他什么)。

如果我运行“host asdfsadfsadf”或“dig asdfasfsafa”,它会像您预料的那样失败。但“wget”的行为方式与“curl”相同(我知道它们解析 DNS 的方式不同,所以也许这是一个线索)。

我已经调查了好几个小时了。/etc/hosts 中没有任何条目,我没有运行任何 DNS 缓存,我检查了 /etc/nsswitch.conf,只有“文件、dns”解析,我没有任何特殊的 iptables 配置,等等。

更重要的是,抛开问题的 DNS 部分...为什么是端口 8080?

这太奇怪了,为什么会发生这种情况?有什么想法吗?

我正在运行 Ubuntu 16.04。

谢谢!

答案1

看起来您在环境中定义了一个代理服务器,例如在http_proxy环境变量中。

检查您的 shell 环境并从定义它的 shell 启动脚本中删除变量,或者启动代理服务器。

或者,您可以通过传递 来要求 curl 忽略代理环境变量-x ""

curl -x "" https://www.google.com/

相关内容