cURL无法连接到localhost但浏览器可以

时间:2014-01-07 22:29:25

标签: ruby-on-rails curl osx-mavericks thin

我在本地运行Rails应用程序(瘦服务器),我可以从浏览器本地连接(localhost:3000),但是当我尝试使用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

这曾经工作得很好,但我最近更新到小牛队,我怀疑可能已经破坏了一些东西。我也可以从网上成功卷曲。

6 个答案:

答案 0 :(得分:53)

这是curl buga strange one),如果/ etc / hosts中的IPv6条目没有响应,则curl无法回退到IPv4。< / p>

您可以通过-4选项强制它使用IPv4。

答案 1 :(得分: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

使用第2行末尾的网址而不是ENV['HOST']

答案 2 :(得分:2)

你是代理人吗?然后使用下面的代码完全绕过代理。

curl -x "" "http://127.0.0.1:3000"

答案 3 :(得分:1)

假设您没有触及/ etc / hosts且scutil报告是肯定的:

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

然后我的猜测是防火墙处于活动状态,不接受来自curl的连接。

尝试将curl添加到列表中接受的应用程序下(我正在考虑语言替代方案,因为我的机器设置为使用瑞典语)Preference - &gt;安全 - &gt;防火墙替代方案 - &gt;加号 - &gt; (selch for curl并添加它)

注意:请确保在shell中添加实际使用的curl。

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

答案 4 :(得分:0)

此问题的另一个原因可能是配置不当的系统带有代理地址。运行

export http_proxy=

并重新运行curl命令,将其作为一个促成因素。它为我解决了这个问题。

答案 5 :(得分:0)

重新启动计算机有时可以解决奇怪的连接问题。我不知道为什么。