【问题标题】:Making a POST request using Superagent, AWS Lambda, API Gateway使用 Superagent、AWS Lambda、API Gateway 发出 POST 请求
【发布时间】:2016-03-16 14:11:18
【问题描述】:

我正在使用 AWS Lambda 和 API Gateway 为负载测试创建自定义端点。我已经上传了一个文件中的处理函数,以及该函数所需的节点模块,并按照说明正确设置了 API Gateway API(与我之前的工作方式一致) ,但我不断收到错误:{“error”:“Missing Authentication Token”}。到目前为止,我在网上看到的所有内容都表明我通过 POST 请求传递的 url 无效,但我已经使类似的端点与 GET 请求一起工作。据我所知,我已经正确设置了 POST 请求(使用 Superagent),并且传入了一个有效的访问令牌,以及作为 URL 一部分的硬编码参数(有效参数)。

// 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!!");
    }
});

};

对此有什么想法吗?谢谢

【问题讨论】:

    标签: aws-lambda aws-api-gateway superagent


    【解决方案1】:

    当我错过了我的 API 所需的 URL 的某些部分时,我通常会收到此错误。在过去,它要么是舞台名称、拼写错误的资源名称,要么是缺少 Path 参数。

    【讨论】:

    • 是的,我认为这是一种可能性。奇怪的是,我可以在 Postman 中运行 curl 或运行此 URL,而且效果很好。感谢您的反馈
    • 如果你的 curl 工作,但从 Superagent 调用没有,我想知道是否有一种方法可以使用像 Charles 这样的 HTTP 代理,这样你就可以准确地记录网络上发生的事情并进行比较他们俩。 Wireshark 甚至 tcpdump 也可以工作。
    • 好主意。谢谢你的建议
    【解决方案2】:

    我来自 Api Gateway 团队。

    正如其他人所说,您收到 403 响应的最常见原因是路径/方法不正确。我不熟悉 Superagent,但如果您在 Postman 和 cURL 中运行相同的请求,那么如果您的路径/方法错误,我会感到惊讶。

    如果可能,还可以检查线路日志,以确保您的查询字符串逻辑没有在“?”之前附加正斜杠。

    需要检查的一些事项:

    您最近是否部署了对 API 的任何更改?

    舞台“v2”(我假设那是舞台)是否指向 API 的已部署版本,该 API 具有 POST 到邀请/212733/create?

    “访问令牌”应该对 Api 网关层没有影响。如果您尝试使用本机 Api Gateway Api Key,则标头为“x-api-key”。

    杰克

    【讨论】:

    • 杰克。非常感谢你提供的信息。这非常有帮助。我已经设法通过使用 Request.js 模块而不是 Superagent 使其工作。不知道究竟是什么造成了差异,但它现在似乎可以工作了。
    猜你喜欢
    • 2023-02-14
    • 1970-01-01
    • 2016-06-02
    • 1970-01-01
    • 2017-09-27
    • 2019-04-16
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多