我在本地运行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
这曾经工作得很好,但我最近更新到小牛队,我怀疑可能已经破坏了一些东西。我也可以从网上成功卷曲。
答案 0 :(得分:53)
这是curl bug(a 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)
重新启动计算机有时可以解决奇怪的连接问题。我不知道为什么。