我正在尝试从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

因此证明他的请求是允许的。但是,如果脚本尝试使用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()
默默地失败 - 不会抛出错误 - 日志中没有任何内容报告。
答案 0 :(得分:4)
问题是我从未使用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
&#13;
答案 1 :(得分:0)
如果你的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);
});
}
如果是HTTP,那么,
var url = 'HTTP URL HERE';
var req = http.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);
});
}
请不要尝试添加包需求('https')/ require('http')