J'essaie de faire une demande http à news.google.com en utilisant le module native node.js
http
. Je reçois leconnect ECONNREFUSED 127.0.0.1:80
erreur lorsque j'ai essayé ce qui suit
var http = require('http');
var payload = JSON.stringify({
name: 'John Smith',
email: '[email protected]',
resume: 'https://drive.google.com/open?id=asgsaegsehsehseh'
});
var options = {
hostname: 'https://news.google.com',
path: '/',
method: 'GET'
};
var httpRequest = http.request(options, function(request, response) {
console.log('STATUS', response.statusCode);
response.setEncoding('utf8');
response.on('data', function(chunk) {
console.log('BODY:', chunk);
});
response.on('end', function() {
console.log('No more data in response');
});
});
httpRequest.on('error', function(e) {
console.log('Error with the request:', e.message);
});
httpRequest.write(payload);
httpRequest.end();
Pourquoi ai-je cette erreur?
J'ai essayé d'utiliser le module request
npm. Et ça a marché!
Dans mon cas, le problème était en fait le comportement par défaut du client HTTP que j'utilisais, axios
.
Par défaut, axios nous redirige vers 127.0.0.1:80
s'il ne trouve pas l'URL demandée ou la méthode http
(GET/POST/PUT). Il vaut donc mieux vérifier votre URL si vous utilisez également axios
.
Mon problème était lors de l'utilisation de supertest
et jest
. Mon erreur n'était pas de mettre "/" comme préfixe à une URL. Vérifiez donc si l'URL de la demande que vous faites est correcte.
Il y a plusieurs problèmes ici:
Le champ hostname
de la structure options
doit être uniquement l'hôte, pas une URL. Dans votre cas, cela devrait être simplement 'news.google.com'
.
La signature du rappel de la méthode request
est function (response)
- la vôtre est function (request, response)
. Perdez le premier paramètre.
Comme écrit, cela retournera toujours une redirection HTTP vers le site https. Remplacez var http = require('http');
par var https = require('https');
puis utilisez https
partout au lieu de http
.