web-dev-qa-db-ja.com

HTTPリクエストを試行するときにECONNREFUSED 127.0.0.1:80に接続する

ネイティブのnode.js httpモジュールを使用して、news.google.comにhttpリクエストを送信しようとしています。 connect ECONNREFUSED 127.0.0.1:80以下を試したときのエラー

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();

このエラーが発生するのはなぜですか?

request npmモジュールを使用してみました。そしてそれはうまくいった!

10
ng-hacker-319

私の場合、問題は実際に、私が使用していたHTTPクライアントのデフォルトの動作axiosでした。

デフォルトでは、リクエストされたURLまたはhttpメソッド(GET/POST/PUT)が見つからない場合、axiosは127.0.0.1:80にリダイレクトします。 axiosも使用している場合は、URLを確認してください。

22
Jaspreet Singh

私の問題は、supertestjestの使用中に発生しました。私の間違いは、一部のURLの接頭辞として「/」を付けなかったことです。そのため、行っているリクエストのURLが適切かどうかを再確認してください。

7
arispen

ここにはいくつかの問題があります:

  1. hostname構造体のoptionsフィールドは、URLではなくホストのみにする必要があります。あなたの場合、それは_'news.google.com'_でなければなりません。

  2. requestメソッドへのコールバックのシグネチャはfunction (response)です-あなたのものはfunction (request, response)です。最初のパラメータを失います。

  3. 書かれているように、これはhttpsサイトへのHTTPリダイレクトを返します。 var http = require('http');var https = require('https');に置き換え、httpsではなくhttpをどこでも使用します。

5
keithmo