Ubuntu
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 這樣的現有域也是如此。
但是,如果我將它指向一個像https://google.com這樣的 SSL URL ,它會解析並執行請求。此外,如果我將它指向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。
謝謝!
看起來您在環境中定義了代理伺服器,例如在
http_proxy
環境變數中。檢查您的 shell 環境並從定義它的任何 shell 啟動腳本中刪除該變數,或啟動代理伺服器。
或者,您可以通過傳遞
-x ""
.curl -x "" https://www.google.com/