Node.js Https demande d'Erreur
J'ai essayé l'exemple de la documentation et il fonctionne très bien.
Mais quand je change l'URL de https://api.mercadolibre.com/sites/
, la demande se bloque. La seule chose que j'obtiens est:
{ [Error: socket hang up] code: 'ECONNRESET' }
Voici mon code:
var https = require('https');
this.dispatch = function(req, res) {
var renderHtml = function(content) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(content, 'utf-8');
}
var parts = req.url.split('/');
var options = {
host: 'api.mercadolibre.com',
port: 443,
path: '/sites/',
method: 'GET'
};
var request = https.request(options, function(res) {
console.log("statusCode: ", res.statusCode);
console.log("headers: ", res.headers);
res.on('data', function(d) {
process.stdout.write(d);
});
});
request.on('error', function(e) {
console.error('error');
console.error(e);
});
request.end();
return 'item id:' + parts[2];
};
J'ai essayé avec curl, soapui et avec un navigateur. Sur tous les cas de grandes œuvres, mais avec node.js il n'a pas.
Comment puis-je obtenir plus de données sur ce qui se passe?
ajouté
Avec curl-je faire: curl --sslv3 https://api.mercadolibre.com/sites/ œuvres.
J'ai test même dans centos 6 et fonctionne aussi.
J'ai réinstallé nœud, cette fois à partir de la source, même problème. Mon Os est ubuntu 12.04.
Merci.
- Vous aurez besoin de nous montrer que vous utilisez afin que nous puissions diagnostiquer le problème.
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr
api.mercadolibre.com
site, mais je peux appeler l'API, si je retireport
param, comme le code suivant:Et nous avons aussi besoin d'ajouter un paramètre à prendre en charge SSL version 3:
SSLv3_method
m'a aidé à résoudre un enfant de 2 ans problème! Merci beaucoup!Depuis qu'il travaille avec curl, essayez d'utiliser nœud-curl module. J'ai perdu une journée entière à essayer de le faire fonctionner dans la node.js avec http et/ou https modules jusqu'à ce que je suis passé à nœud-curl.
Essayez ceci:
Pourquoi ne pas utiliser une bibliothèque comme demande de traiter avec les détails pour vous?
Cela donne:
{ [Error: socket hang up] code: 'ECONNRESET' }
de nouveau? Ça sonne peut-être le blocage de l'accès à partir de votre adresse IP, ou quelque chose.Même ici, en travaillant avec curl mais pas avec node.js.
Problème: ici sur CentOS-5 curl usesthe fournit des bibliothèques openssl et donc utilise centos standard /etc/pki/tls/certs/ca-bundle.le tube cathodique pour l'autorité de certification vérifie.
Où node.js recherchez?, via strace là, je ne vois aucune référence à une autorité de certification-fichier pour vérification.
Node.js demande contre le serveur avec SSL valide-certificat de bien connue vieux émetteur sont acceptés, mais pas contre mon propre serveur avec propre autorité de certification.
J'ai mis mon propre autorité de certification.crt dans le ca-bundle.crt fichier, alors maintenant curl accepte, mais pas node.js.
Seule solution est de désactiver la vérification-vérifier pour mon dev-box:
Je pense que vous êtes derrière un proxy qui vous devez spécifier à la demande. Les paramètres de Proxy sont détectées automatiquement par libcurl, qui nœud-curl utilise. Par conséquent, la demande passe dans le nœud de la tuile.
Donc, trouver l'IP du proxy et le port de votre organisation utilise, et essayez ce qui suit:
Vous obtiendrez la ECONNRESET d'erreur si vous faites cela:
Qui est, vous devez vous assurer que votre chemin a un / comme ceci: