2014-01-07 222 views
28

我在本地運行Rails應用程序(瘦服務器),並且我可以從瀏覽器本地連接(localhost:3000),但是當我嘗試使用curl時,得到:cURL無法連接到本地主機,但瀏覽器可以

curl -H 'id:1' -i 'http://localhost:3000/api/data' -v 

* Hostname was NOT found in DNS cache 
* Trying ::1... 
* Adding handle: conn: 0x7fd121808200 
* Adding handle: send: 0 
* Adding handle: recv: 0 
* Curl_addHandleToPipeline: length: 1 
* - Conn 0 (0x7fd121808200) send_pipe: 1, recv_pipe: 0 
* Connection failed 
* connect to ::1 port 3000 failed: Connection refused 
* Trying fe80::1... 
* Connection failed 
* connect to fe80::1 port 3000 failed: Connection refused 
* Failed to connect to localhost port 3000: Connection refused 
* Closing connection 0 
curl: (7) Failed to connect to localhost port 3000: Connection refused 

這用於工作很好,但我最近更新到小牛,我懷疑可能已經打破了一些東西。我也可以從網上成功捲曲。

+5

你可以試試'http://127.0.0.1:3000/api/data'嗎?看起來像是由於某種原因捲曲直接到ipv6 ... – fvu

+0

謝謝,這似乎工作。任何想法爲什麼突然出現這種情況? – jbeck

+0

我不是mac-person,但我認爲localhost的條目可能已經從/ etc/hosts中消失了(應該有一行像127.0.0.1 localhost這樣將localhost連接到127.0.0.1的環回地址。如果該行存在,那麼resolv.conf或mac用來決定是否查閱hosts文件和/或dns以及它的順序的任何證實文件都可能存在問題。 – fvu

回答

1

假設你沒有碰過/ etc/hosts和scutil報告是積極的:

$ scutil -r 127.0.0.1 
Reachable,Local Address 
$ scutil -r localhost 
Reachable,Local Address 

然後我的猜測是,防火牆是捲曲活動的,也不接受連接。

嘗試添加捲曲到列表接受的應用程序下(我猜在選擇語言,因爲我的機器設置爲使用瑞典語)首選項 - >安全 - >防火牆替代品 - >加號 - >( serach捲曲並添加它)

注意:確保您添加實際使用在您的shell中的捲曲。

$ type -a curl 
curl is /opt/local/bin/curl 
curl is /usr/bin/curl 
52

這是一個curl buga strange one),其中捲曲未能回落到IPv4的,如果有在/ etc /不響應主機的IPv6條目。

您可以強制它通過-4選項使用IPv4。

+0

如何? @Steve Clay –

+11

在您的命令中添加-4: curl -4 -H'id:1'-i'http:// localhost:3000/api/data'-v – Kylar

+0

它似乎確實是一個IPv6問題。如果我從我的/ etc/hosts文件註釋掉「fe80 :: 1%lo0 \t localhost」,那麼curl會正常工作。我有兩個mac優勝美地,但只有一個有這個入口。任何人都可以評論爲什麼一個主機將有一個IPv6條目的本地主機? –

22

而不是

curl localhost:3000 

嘗試

curl 0.0.0.0:3000 

它的工作原理。
如果沒有,檢查輸出,當你開始你的Rails服務器:

=> Booting WEBrick 
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000 
=> Call with -d to detach 
=> Ctrl-C to shutdown server 
[2014-10-28 15:30:08] INFO WEBrick 1.3.1 
[2014-10-28 15:30:08] INFO ruby 2.0.0 (2014-02-24) [x86_64-darwin12.5.0] 
[2014-10-28 15:30:08] INFO WEBrick::HTTPServer#start: pid=4004 port=3000 

使用URL以代替ENV['HOST']

+4

爲什麼它可以使用'0.0.0.0:3000'而不是'localhost:3000'? – allegutta

0

這個問題的另一個原因2線的末端可以是很差配置代理地址的系統。運行

export http_proxy= 

並重新運行curl命令,以消除這種影響因素。它爲我解決了這個問題。

2

您是否支持代理?然後使用下面的代碼完全繞過代理。

curl -x "" "http://127.0.0.1:3000" 
相關問題