Aws lambda 使用Superagent、AWS Lambda、API网关发出POST请求
我正在使用AWS Lambda和API网关为负载测试创建自定义端点。我已经上传了文件中的处理程序函数,以及zip中函数所需的节点模块,并根据说明正确设置了API网关API(与我之前的工作方式一致),但我不断收到错误:{“错误”:“缺少身份验证令牌”}。到目前为止,我在网上看到的一切都表明,我在POST请求中传递的url是无效的,但我已经使用GET请求创建了一个类似的端点。据我所知,我已经正确设置了POST请求(使用Superagent),并且正在传入一个有效的访问令牌,以及作为URL(有效参数)一部分的硬编码参数Aws lambda 使用Superagent、AWS Lambda、API网关发出POST请求,aws-lambda,aws-api-gateway,superagent,Aws Lambda,Aws Api Gateway,Superagent,我正在使用AWS Lambda和API网关为负载测试创建自定义端点。我已经上传了文件中的处理程序函数,以及zip中函数所需的节点模块,并根据说明正确设置了API网关API(与我之前的工作方式一致),但我不断收到错误:{“错误”:“缺少身份验证令牌”}。到目前为止,我在网上看到的一切都表明,我在POST请求中传递的url是无效的,但我已经使用GET请求创建了一个类似的端点。据我所知,我已经正确设置了POST请求(使用Superagent),并且正在传入一个有效的访问令牌,以及作为URL(有效参数)
对此有何想法??谢谢当我错过了API所需的URL的某些部分时,通常会出现此错误。在过去,它要么是阶段名称,要么是拼写错误的资源名称,要么是缺少路径参数 我来自Api网关团队 正如其他人所说,导致403响应的最常见原因是路径/方法不正确。我不熟悉Superagent,但是如果您在Postman和cURL中运行了相同的请求,那么如果您的路径/方法错误,我会感到惊讶 如果可能的话,还可以检查接线日志,以确保querystring逻辑没有在“?”之前附加正斜杠 一些需要检查的事项: 您是否部署了对API的任何最新更改 阶段“v2”(我假设这就是阶段)是否指向API的已部署版本,该版本的POST为invites/212733/create “访问令牌”应该对Api网关层没有影响。如果您试图使用本机Api网关Api密钥,则标头为“x-Api-Key”
杰克是的,我认为这是一种可能性。奇怪的是,我可以运行curl或在Postman中运行此URL,而且效果很好。我很感激您的反馈如果您的curl有效,但是Superagent的调用无效,我想知道是否有一种方法可以使用像Charles这样的HTTP代理,这样您就可以获得一份关于网络上发生的事情的日志,并对两者进行比较。Wireshark甚至tcpdump也可以工作。好主意。谢谢你的建议,杰克。非常感谢您提供的信息。这非常有用。我通过使用Request.js模块而不是Superagent,成功地实现了这一点。不确定到底是什么造成了这种差异,但现在似乎起了作用。
// Dependencies
var request = require('superagent');
var sync = require('synchronize');
exports.handler = function(event, context) {
sync.fiber(function() {
// Grabs params passed into the URL as a JSON object
var querystring = (event.querystring);
// Replaces params with an updated version which includes a single quotation
var queryStringUpdate = querystring.replace(/=/g, ":").replace(/}/g, "'}").replace(/:/g, ":'").replace(/,/g, "',");
// Updates the param information and sets it as a new string
eval('var queryString2 =' + queryStringUpdate);
// Define specific query params to be used in the REST calls
var userId = (queryString2.userId === undefined ? '229969' : queryString2.userId);
var roomdId = (queryString2.roomId === undefined ? '4' : queryString2.roomId);
var inviterId = (queryString2.inviterId === undefined ? '212733' : queryString2.inviterId);
var createInvitePost = function() {
request
.post('https://some_url/v2/invites/212733/create')
.set({'access-token': 'some_access_token'})
.set('Content-Type', 'application/json')
.query({user_id: "229969"})
.query({room_jid: "4"})
.end(function(err, res){
if (err) {
context.fail("Uh oh, something went wrong");
} else {
context.done(null, "Hurray, it worked!!");
}
});
};
try {
createInvitePost();
} catch(errOne) {
alert("No bueno!!");
}
});
};