web-dev-qa-db-fra.com

Se connecter ECONNREFUSED 127.0.0.1:80 lors d'une tentative de requête HTTP

J'essaie de faire une demande http à news.google.com en utilisant le module native node.js http. Je reçois le connect 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é!

10
ng-hacker-319

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.

22
Jaspreet Singh

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.

7
arispen

Il y a plusieurs problèmes ici:

  1. 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'.

  2. La signature du rappel de la méthode request est function (response) - la vôtre est function (request, response). Perdez le premier paramètre.

  3. 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.

5
keithmo