【问题标题】:AWS API Gateway: why post request body is encoded base64?AWS API Gateway:为什么发布请求正文是 base64 编码的?
【发布时间】:2020-10-11 14:38:47
【问题描述】:

我正在使用 API 网关触发 Lambda 函数,使用 Lambda 代理集成,但是请求正文是 base64 编码的,这是为什么呢?以及如何将其更改为 JSON 以对 JSON 进行字符串化?

【问题讨论】:

  • 如何调用api?

标签: amazon-web-services aws-lambda aws-api-gateway


【解决方案1】:

那是因为您在 API Gateway 中使用 Lambda 代理集成。 如果你使用 Lambda 集成,那就没问题了,你可以得到 JSON。

您也可以将其更改为 JSON 以使用以下方法对 JSON 进行字符串化。

let buff = Buffer.from(event.body, "base64");
let eventBodyStr = buff.toString('UTF-8');
let eventBody = JSON.parse(eventBodyStr);

【讨论】:

    【解决方案2】:

    如果我对您的问题的理解正确,那么您将非 base64 编码的 JSON 有效负载作为请求发送到 API 网关,但是您的 Lambda 将其作为 base64 编码的字符串接收。

    您似乎没有将application/json 设置为您的请求content-type。 您可以在此表中看到 API 网关如何确定 Integration Request Payload(最后一列)是 Base64-encoded string 还是其他类型。

    https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings-workflow.html

    【讨论】:

    • 我有同样的问题,我确实设置了application/json 请求content-type。一切都在本地(无服务器离线)和在 AWS 控制台中进行测试(发送 json 对象作为正文)时工作,但在通过 http 调用时则不行。
    • 我解决了@gilads,但我不知道我做了什么了:(。
    • 谢谢,我遇到了与 OP 使用 cURL 调用我的 API 并添加标题 -H "Content-Type: application/json" 一样的问题
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 2019-06-19
    • 2019-11-03
    • 2021-04-20
    • 2020-04-16
    • 2022-10-14
    • 1970-01-01
    相关资源
    最近更新 更多