【发布时间】:2020-10-11 14:38:47
【问题描述】:
我正在使用 API 网关触发 Lambda 函数,使用 Lambda 代理集成,但是请求正文是 base64 编码的,这是为什么呢?以及如何将其更改为 JSON 以对 JSON 进行字符串化?
【问题讨论】:
-
如何调用api?
标签: amazon-web-services aws-lambda aws-api-gateway
我正在使用 API 网关触发 Lambda 函数,使用 Lambda 代理集成,但是请求正文是 base64 编码的,这是为什么呢?以及如何将其更改为 JSON 以对 JSON 进行字符串化?
【问题讨论】:
标签: amazon-web-services aws-lambda aws-api-gateway
那是因为您在 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);
【讨论】:
如果我对您的问题的理解正确,那么您将非 base64 编码的 JSON 有效负载作为请求发送到 API 网关,但是您的 Lambda 将其作为 base64 编码的字符串接收。
您似乎没有将application/json 设置为您的请求content-type。
您可以在此表中看到 API 网关如何确定 Integration Request Payload(最后一列)是 Base64-encoded string 还是其他类型。
【讨论】:
application/json 请求content-type。一切都在本地(无服务器离线)和在 AWS 控制台中进行测试(发送 json 对象作为正文)时工作,但在通过 http 调用时则不行。
-H "Content-Type: application/json" 一样的问题