web-dev-qa-db-fra.com

cURL ne peut pas se connecter à localhost mais le navigateur peut

J'exécute une application Rails localement (Thin Server) et je peux me connecter localement à partir du navigateur (localhost: 3000), mais lorsque j'essaie d'utiliser curl, je reçois:

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

Auparavant, cela fonctionnait très bien, mais j'ai récemment mis à jour Mavericks, qui, je suppose, a peut-être cassé quelque chose. Je peux aussi m'enrouler avec succès sur le Web.

28
jbeck

Ceci est un bogue curl ( un étrange ), où curl ne parvient pas à revenir à IPv4 s'il existe une entrée IPv6 dans/etc/hosts qui ne répond pas.

Vous pouvez le forcer à utiliser IPv4 via l'option -4.

52
Steve Clay

Au lieu de

curl localhost:3000

essayer

curl 0.0.0.0:3000

Ça marche.
Si ce n'est pas le cas, vérifiez le résultat lorsque vous démarrez votre serveur 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

Utilisez l'URL à la fin de la ligne 2 au lieu de ENV['Host']

22
Marco Prins

Êtes-vous derrière un proxy? Ensuite, utilisez les options ci-dessous pour ignorer complètement le proxy.

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

En supposant que vous n’ayez pas touché à/etc/hosts et que les rapports scutil soient positifs:

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

alors, je suppose que le pare-feu est actif et n'accepte pas les connexions de curl.

Essayez d’ajouter curl à la liste des applications acceptées sous (je devine quelles sont les langues possibles car ma machine est configurée pour utiliser le suédois) ajoutez-le)

Remarque: assurez-vous d’ajouter le curl que vous utilisez réellement dans votre Shell.

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

Une autre cause de ce problème peut être un système mal configuré avec une adresse proxy. Courir

export http_proxy=

et réexécutez la commande curl afin d’éliminer ce facteur. Il a résolu ce problème pour moi.

0
Philluminati