使用https.request

时间:2015-10-08 23:42:43

标签: javascript node.js sockets

我有这个代码向远程API发出POST请求。

var method = 'POST';
var params = {foo: 'bar', /* something else */};
var path = '/method/somemethod';
var host = 'my.host.com';
var body = querystring.stringify(params);

var options = {
  host: host,
  port: 443,
  path: path,
  method: method,
  agent: false
};

var req = https.request(options);

req.on('response', function(res) {
  var chunks = [];
  res.on('data', function(chunk) {
    chunks.push(chunk);
  });

  res.on('end', function() {
    var data = Buffer.concat(chunks).toString('utf-8');
    // done
  });
});

if (method == 'POST') {
  req.setHeader('Content-Type', 'application/x-www-form-urlencoded')
  req.setHeader('Content-Length', Buffer.byteLength(body));
  req.end(body);
} else {
  req.end();
}

req.on('error', function(e) {
  log('error:', e);
});

大部分时间它工作正常,但SOMETIMES套接字挂起。

(顺便说一句,它也发生在GET请求中。)

我确信我的互联网连接或远程服务器没有问题。我尝试使用其他工具/语言发出此请求,一切正常,只有node.js偶尔会挂断。

Node.js版本是4.1.1。

通常我的应用程序会同时发出几个请求,如果这很重要(例如,不仅仅是一个请求,而是两个异步请求。我不知道它会如何影响我的问题,我只是出于关于什么可能是什么的理论错误。或者SSL握手在某些时候失败?)。

我见过另一个有类似抱怨的帖子,但他们要么没有帮助我,要么没有帮助。

非常感谢任何帮助。

0 个答案:

没有答案