尝试HTTP请求时,请连接ECONNREFUSED 127.0.0.1:80

时间:2016-10-07 06:25:39

标签: node.js http post get request

  

我正在尝试使用原生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: 'john.smith@smith.com',
    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模块。它有效!

5 个答案:

答案 0 :(得分:8)

就我而言,问题实际上是我使用的HTTP客户端的默认行为axios

默认情况下,如果axios未找到请求的URL或127.0.0.1:80方法(GET / POST / PUT),则会将我们重定向到http。因此,如果也使用axios,请检查您的URL。

答案 1 :(得分:4)

这里有几个问题:

  1. hostname结构的options字段应该只是主机,而不是URL。在您的情况下,它应该是'news.google.com'

  2. request方法回调的签名为function (response) - 您的签名为function (request, response)。丢掉第一个参数。

  3. 如上所述,这将返回HTTP重定向到https站点。将var http = require('http');替换为var https = require('https');,然后使用https,而不是http

答案 2 :(得分:2)

我的问题是使用supertestjest时。我的错误是没有将“ /”作为某些URL的前缀。因此,请仔细检查您提出的请求的网址是否正确。

答案 3 :(得分:2)

我正在使用axios,此错误与get请求一起发生,通过在我的网址(在我的情况下,服务器为http)之前添加http://来解决了该错误

答案 4 :(得分:-3)

Ctrl + C (关闭博览会服务器)。 当博览会仪表板成功停止后,请运行以下命令:

expo build: android