Python无法读取API Gateway请求中的主体吗?

4 浏览
0 Comments

Python无法读取API Gateway请求中的主体吗?

我正在尝试编写一个通过 API Gateway 端点触发的 Lambda 函数的代码。简单地返回事件,我可以看到响应中有一个 body:

def lambda_handler(event, context):
    return str(event)

响应:

{
    'version': '2.0',
    'routeKey': 'ANY /identify',
    'rawPath': '/default/identify',
    'rawQueryString': '',
    'headers':
    {
       ...
    },
    'requestContext':
    {
       ...
    },
    'body': '',
    'isBase64Encoded': True
}

然而,一旦我尝试只返回 body,我就会得到以下错误(包含了多个示例,它们都返回相同的错误)。

def lambda_handler(event, context):
    return str(event['body'])

def lambda_handler(event, context):
    return json.loads(event['body'])

def lambda_handler(event, context):
    params = parse_qs(event["body"])

def lambda_handler(event, context):
    return event['body']

{
  "errorMessage": "'body'",
  "errorType": "KeyError",
  "requestId": "5acbcc66-da05-429f-baa9-6c8d83801b4f",
  "stackTrace": [
    "  File \"/var/task/lambda_function.py\", line 10, in lambda_handler\n    return json.loads(event['body'])\n"
  ]
}

有什么想法吗?

0
0 Comments

问题原因:在API Gateway请求中,Python无法读取请求体。

解决方法:在处理程序中使用json.loads()方法将JSON字符串解析为Python字典对象。

import json
data = json.loads(event["body"])
print("[DEBUG] event['body']: {}".format(data))

这样,你就可以使用解析后的请求体data进行后续的操作了。

0