AWS Lambda(NodeJS)不允许http.request或https.request?

我试图从一个Lambda请求另一个API。 我发现使用NodeJS http和https模块允许GET请求,但任何其他(例如POST)不起作用; 同时POST是唯一的方法,我需要为我尝试调用的服务工作。

下面是一个Lambda执行GET并收到200响应的示例:

const https = require('https') function handler(event, context, callback) { const options = { hostname: 'encrypted.google.com' } https .get(options, (res) => { console.log('statusCode:', res.statusCode); res.on('end', callback.bind(null, null)) }) .on('error', callback); } exports.handler = handler 

这certificate他的请求是允许的。 但是,如果脚本尝试使用https(或https)lib /模块的.request()方法发出相同的请求,请求将永远不会结束,并且Lambda会超时。

 const https = require('https') function handler(event, context, callback) { const options = { hostname: 'encrypted.google.com', method: 'GET' } https .request(options, (res) => { console.log('statusCode:', res.statusCode); res.on('end', callback.bind(null, null)) }) .on('error', callback); } exports.handler = handler 

我不知道我做错了什么。 调用https.request()静静地失败 – 不会抛出一个错误 – 在日志中没有任何报告。

问题是我从来没有用req.end()完成请求。

 const https = require('https') function handler(event, context, callback) { const options = { hostname: 'encrypted.google.com', method: 'GET' } https .request(options, (res) => { console.log('statusCode:', res.statusCode); res.on('end', callback.bind(null, null)) }) .on('error', callback) .end(); // <--- The important missing piece! } exports.handler = handler 

如果你的API是HTTPS,请试试这个,

 var url = 'HTTPS URL HERE'; var req = https.get(url, (res) => { var body = ""; res.on("data", (chunk) => { body += chunk }); res.on("end", () => { var result = JSON.parse(body); callBack(result) }); }).on("error", (error) => { callBack(err); }); }