1

我正在尝试从 API Gateway 代理请求中检索请求正文。当我通过一个身体时,我得到一个随机字符串。该请求在 API 网关中的测试中运行良好,但在实际 API 中运行良好

我得到的要求是

{
    "path": "/movie",
    "headers": {
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "none",
        "accept-language": "en-US,en;q=0.9",
        "postman-token": "e9f9216f-850d-1037-a2c9-d6a554f55813",
        "origin": "chrome-extension://fhbjgbiflinjbdggehcddcbncdddomop",
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36",
        "X-Forwarded-Proto": "https",
        "Host": "8cfsbr5d62.execute-api.us-east-1.amazonaws.com",
        "X-Forwarded-Port": "443",
        "X-Amzn-Trace-Id": "Root=1-5ed9e7b8-94f205f0fed74580d6bb5bf0",
        "accept": "*/*",
        "X-Forwarded-For": "49.206.4.254",
        "content-type": "application/json",
        "cache-control": "no-cache",
        "accept-encoding": "gzip, deflate, br",
        "sec-fetch-dest": "empty"
    },
    "resource": "/movie",
    "queryStringParameters": {
        "movie": "ddk"
    },
    "httpMethod": "POST",
    "body": "ewoJIm1vdmllIjoiZ3BwIgp9"
}
4

2 回答 2

1

它是base64 编码的:

base64 -d <<< ewoJIm1vdmllIjoiZ3BwIgp9
{
    "movie":"gpp"
}

因此,您必须在您的 lambda 中对其进行解码。

您可以获得有关 API 网关编码/解码到 base64 的更多信息:

于 2020-06-05T06:59:45.820 回答
0

问题是我将二进制媒体类型配置为“*/*”,因为其中一个 API 具有图像有效负载。但是该配置也影响了 JSON 有效负载,并且 API 开始将任何请求正文编码为编码字符串。我的情况是字符串实际上不是随机的,它是 Base 64 编码的字符串。

两种选择:

1)如果要保留通用二进制媒体类型,则在 Lambda 中解码 Base64 字符串

2) 在 API 网关设置中保留特定的二进制媒体类型,例如。图片/*

于 2020-06-05T07:53:31.590 回答