1

我在通过 Node.js 加载页面时遇到了很大的麻烦。这是我的 Node.js 应用程序的代码,请注意,如果我尝试加载其他资源(如 www.google.com),它会起作用,因此问题特定于域名 www.egopay.com:

 var http = require('http');
 var options = {
    hostname: 'www.egopay.com',
    port: 80,
    path: '/',
    method: 'GET'
};

var req = http.request(options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
});

req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();

使用 cURL 它可以工作,Node.js 不会。

请求后大约一分钟出现此错误:

problem with request: read ECONNRESET
4

2 回答 2

2

当我发出相同的请求,但在标头中添加了一个用户代理时,我得到了一个响应,它清楚地说明了发生了什么。尝试将此行添加到您的选项中:

headers: {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.62 Safari/537.36'},

基本上,他们有一个 nginx 服务器,可以将您重定向到具有相同 URL 的 HTTPS 站点。如果不包含用户代理,您没有得到响应可能是该站点的 nginx 部署中的错误。我无法以其他方式解释它,因为我无法在 Chrome 或 Firefox 中重现这种情况。即使用空的用户代理覆盖。我想这是空字符串和未定义字符串之间的区别。节点发送的标头字段完全未定义,而我试图复制的浏览器只发送一个空字符串。同样,无法重新创建,但这是我最好的猜测。

于 2013-09-03T19:10:35.733 回答
1

我在 Node js 中遇到了类似的请求问题,所以我编写了这个 npm 包:

https://npmjs.org/package/curljs

希望能帮助到你!

于 2013-09-03T19:04:19.943 回答