Aws lambda 使用Superagent、AWS Lambda、API网关发出POST请求

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(有效参数)

我正在使用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!!");
    }
});

};