ruby on rails - cURL no se puede conectar a localhost, pero el navegador puede
ruby-on-rails osx-mavericks (5)
Estoy ejecutando una aplicación de Rails localmente (servidor Thin), y puedo conectarme localmente desde el navegador (localhost: 3000), pero cuando intento usar curl, obtengo:
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
Esto solía funcionar bien, pero recientemente actualicé a Mavericks, que sospecho que puede haber roto algo. También puedo curvar con éxito desde la web.
¿Estás detrás de un proxy? A continuación, utilice la información siguiente para omitir el proxy por completo.
curl -x "" "http://127.0.0.1:3000"
En lugar de
curl localhost:3000
tratar
curl 0.0.0.0:3000
Funciona.
Si no es así, verifique la salida cuando inicie su servidor de rieles:
=> 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
Use la url al final de la línea 2 en lugar de ENV[''HOST'']
Este es un error curl ( uno extraño ), donde Curl no puede volver a IPv4 si hay una entrada de IPv6 en / etc / hosts que no responde.
Puede obligarlo a usar IPv4 a través de la opción -4
.
Otra causa de este problema puede ser un sistema mal configurado con una dirección proxy. correr
export http_proxy=
y vuelva a ejecutar el comando curl, para eliminar esto como un factor contribuyente. Me solucionó este problema.
Suponiendo que no ha tocado / etc / hosts y scutil reports son positivos:
$ scutil -r 127.0.0.1
Reachable,Local Address
$ scutil -r localhost
Reachable,Local Address
entonces mi conjetura es que el Firewall está activo y no acepta conexiones de curl.
Intente agregar curl a la lista de aplicaciones aceptadas en (supongo que en las alternativas de idioma ya que mi máquina está configurada para usar sueco) Preferencia -> Seguridad -> Alternativas de firewall -> signo más -> (búsqueda de curl y agregarlo)
Nota: asegúrese de agregar el rizo que está usando en su caparazón.
$ type -a curl
curl is /opt/local/bin/curl
curl is /usr/bin/curl