Node.js Https请求错误

Nor*_*rot 7 https node.js

我已经尝试过文档中的示例,但效果很好.

但是当我将URL更改为时https://api.mercadolibre.com/sites/,请求会挂起.我唯一得到的是:

{ [Error: socket hang up] code: 'ECONNRESET' }
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

var https = require('https');

this.dispatch = function(req, res) {
  var renderHtml = function(content) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(content, 'utf-8');
  }

  var parts = req.url.split('/');

  var options = {
    host: 'api.mercadolibre.com',
    port: 443,
    path: '/sites/',
    method: 'GET'
  };

  var request = https.request(options, function(res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);

    res.on('data', function(d) {
      process.stdout.write(d);
    });
  });

  request.on('error', function(e) {
    console.error('error');
    console.error(e);
  });

  request.end();
  return 'item id:' + parts[2];
};
Run Code Online (Sandbox Code Playgroud)

我尝试过使用curl,soapui和浏览器.在所有情况下工作都很好,但使用node.js它没有.

如何获得有关正在发生的事情的更多数据?

添加

随着curl我做:卷曲--sslv3 https://api.mercadolibre.com/sites/工作.我在centos 6中测试过同样的功能.我重新安装了节点,这次来自源,同样的问题.我的Os是ubuntu 12.04.谢谢.

Kim*_*Kha 7

我不确定api.mercadolibre.com网站,但如果我删除portparam,我可以调用API ,如下面的代码:

var options = {
    host: 'api.mercadolibre.com',
    path: '/sites/',
    method: 'GET'
};
Run Code Online (Sandbox Code Playgroud)

我们还需要添加param来支持SSL版本3:

https.globalAgent.options.secureProtocol = 'SSLv3_method';
Run Code Online (Sandbox Code Playgroud)

  • `SSLv3_method`帮助我解决了一个2岁的问题!非常感谢! (2认同)

Ash*_*she 3

为什么不使用类似请求的库来为您处理细节呢?

\n\n
var request = require(\'request\');\n\nrequest(\'https://api.mercadolibre.com/sites/\', {}, function(err, res, body) {\n  console.log("Got body: ", body);\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

这产生:

\n\n
Got body:  [{"id":"MLA","name":"Argentina"},{"id":"MLB","name":"Brasil"},{"id":"MCO","name":"Colombia"},{"id":"MCR","name":"Costa Rica"},{"id":"MEC","name":"Ecuador"},{"id":"MLC","name":"Chile"},{"id":"MLM","name":"Mexico"},{"id":"MLU","name":"Uruguay"},{"id":"MLV","name":"Venezuela"},{"id":"MPA","name":"Panam\xc3\xa1"},{"id":"MPE","name":"Per\xc3\xba"},{"id":"MPT","name":"Portugal"},{"id":"MRD","name":"Dominicana"}]\n
Run Code Online (Sandbox Code Playgroud)\n