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.
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
.
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']
Ê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"
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
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.