Je fais une demande http
avec le client node.js
et j'obtiens une erreur ECONNREFUSED
. Lorsque je fais ce qui semble être la même demande avec mon navigateur ou curl(1)
, cela fonctionne très bien
Voici la demande de noeud:
var options = {
Host: 'localhost',
port: 8080,
path: '/explorers/1.0/agegroup',
method: 'GET'
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log(e);
});
req.end();
Et ça me donne l'erreur:
{ [Error: connect ECONNREFUSED]
code: 'ECONNREFUSED',
errno: 'ECONNREFUSED',
syscall: 'connect' }
Mais quand je fais la même demande avec un client différent (curl
dans ce cas):
$ curl http://localhost:8080/explorers/1.0/agegroup
{... response JSON ...}
Autres notes:
J'ai essayé de changer l'hôte en www.google.com et le port en 80, et le noeud établit la connexion avec succès.
J'ai essayé de changer le port du serveur, et je peux toujours faire des requêtes avec tous les clients sauf node.js (qui a toujours ECONNREFUSED
)
Le serveur auquel je me connecte est le serveur WSGI CherryPy . Lorsque j'essaie de me connecter à un serveur node
sur localhost: 8080, cela fonctionne bien, ce qui me laisse penser que c'est le problème du serveur, à l'exception que d'autres clients fonctionnent avec le serveur CherryPy.
J'ai essayé d'utiliser les mêmes en-têtes que ceux utilisés par mon navigateur, mais cela ne fonctionne pas et il semble que le problème se situe de toute façon au niveau TCP. Par conséquent, les en-têtes HTTP ne devraient pas être un problème.
Quel est le problème avec ma demande node
?
Je suppose que parfois vous avez juste besoin de vous éloigner du problème ...
J'ai trouvé une solution, mais elle ne semble pas répondre à la question et je ne l'aime pas vraiment.
J'ai modifié la configuration du serveur CherryPy pour qu'elle fonctionne à 127.0.0.1
au lieu de localhost
et le client node
a commencé à fonctionner.
Je ne suis pas d'accord avec le désaccord de Soman.
Je me suis tiré la tête, mais oui, il est suffisant que les serveurs nodejs v0.10.24 et v0.10.25 refusent de se connecter à un serveur de développement PHP 5.4 (serveur de ligne de commande de PHP) lorsqu'ils sont appelés en tant que:
php -S localhost:8088
Le navigateur, curl, tout le reste se connecte très bien. Cependant, bien sûr, changer l'adresse de la liaison pour être:
php -S 127.0.0.1:8088
Et nodejs utilisant xmlrpc se connecte parfaitement. Cela s'est produit sous Mac OS X 10.9.1. Très étrange.
Je viens de faire face au même problème.
Notez que Windows 7 par défaut n'inclut pas d'entrée pour localhost dans C:\Windows\System32\drivers\etc\hosts
( référence wikipedia )
L'ajout de l'entrée pour localhost n'a aucun effet avec Node.js (0.10.25) car il ignore apparemment le fichier hosts.
Utilisez 127.0.0.1 comme adresse locale à la place, cela fonctionnera comme jamais dans votre fichier hosts.
J'ai eu le même problème. J'ai pu résoudre le problème en remplaçant localhost ou 127.0.0.1 par l'adresse IP de mon système (utilisez ifconfig pour l'adresse IP).
J'ai exactement fait face au même problème où j'accédais à une URL tierce. J'ai essayé d'utiliser dns (subdomain.domain.com) et ip (XXX.XXX.XXX.XXX), mais cela n'a pas fonctionné.
Après quelques difficultés, je me suis rendu compte plus tard que c’était un problème sur le serveur (subdomain.domain.com) qui n’était pas réactif et s’est éteint.
Je ne suis pas d'accord, c'est un problème avec localhost/127.0.0.1 (ou un nom de domaine contre une adresse IP). (Dans le cas ci-dessus, c'est sûrement un cas de mappage incorrect de l'hôte)