Подтвердить что ты не робот

CURL не может подключаться к localhost, но браузер может

Я запускаю приложение Rails локально (тонкий сервер), и я могу подключиться локально из браузера (localhost: 3000), но когда я пытаюсь использовать завиток, я получаю:

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, который, как я подозреваю, может что-то сломать. Я также могу успешно свернуться из Интернета.

4b9b3361

Ответ 1

Это ошибка завитка (странный), где curl не возвращается к IPv4, если есть запись IPv6 в /etc/hosts, которая не отвечает.

Вы можете заставить его использовать IPv4 с помощью опции -4.

Ответ 2

Вместо

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-адрес в конце строки 2 вместо ENV['HOST']

Ответ 3

Вы за прокси? Затем используйте ниже, чтобы обойти прокси-сервер вообще.

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

Ответ 4

Предполагая, что вы не коснулись /etc/hosts и отчеты scutil положительны:

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

тогда я предполагаю, что брандмауэр активен и не принимает соединения от curl.

Попробуйте добавить завиток в список принятых приложений (я угадываю альтернативы языка, так как моя машина настроена на использование шведского языка) Предпочтение → Безопасность → Альтернативы брандмауэра → плюс знак → (serach для завивки и добавить его)

Примечание. Убедитесь, что вы добавили завиток, который вы фактически используете в своей оболочке.

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

Ответ 5

Другой причиной этой проблемы может быть плохо настроенная система с прокси-адресом. Run

export http_proxy=

и повторите команду curl, чтобы устранить это как способствующий фактор. Он исправил эту проблему для меня.