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
これは以前は問題なく機能していましたが、最近、Mavericksに更新しました。 Webから正常にカールすることもできます。
これは curlバグ ( a strange one )です。/etc/hostsに応答しないIPv6エントリがある場合、curlはIPv4にフォールバックできません。
-4
オプションを使用して、IPv4を強制的に使用できます。
の代わりに
curl localhost:3000
試してみる
curl 0.0.0.0:3000
できます。
そうでない場合は、Rails server:
=> 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
ENV['Host']
の代わりに2行目の終わりにURLを使用します
プロキシの背後にいますか?次に、以下を使用してプロキシを完全にバイパスします。
curl -x "" "http://127.0.0.1:3000"
/ etc/hostsに触れておらず、scutilレポートが肯定的であると仮定すると:
$ scutil -r 127.0.0.1
Reachable,Local Address
$ scutil -r localhost
Reachable,Local Address
私の推測では、ファイアウォールはアクティブであり、curlからの接続を受け入れていません。
(私のマシンはスウェーデン語を使用するように設定されているため、言語の代替を推測しています)環境設定->セキュリティ->ファイアウォールの代替->プラス記号->(curlおよび追加してください)
注:シェルで実際に使用しているカールを必ず追加してください。
$ type -a curl
curl is /opt/local/bin/curl
curl is /usr/bin/curl
この問題のもう1つの原因は、プロキシアドレスが設定されたシステムの構成不良です。走る
export http_proxy=
そして、curlコマンドを再実行して、これを要因として排除します。私にとってこの問題は修正されました。