簡體   English   中英

Python 無法讀取 API 網關請求中的正文?

[英]Python can't read body in API Gateway request?

我正在嘗試編寫一個 Lambda function 代碼,該代碼是通過對 API 網關端點的命中來調用的。 簡單地返回事件,我可以看到響應中有一個正文:

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

回復:

{
    'version': '2.0',
    'routeKey': 'ANY /identify',
    'rawPath': '/default/identify',
    'rawQueryString': '',
    'headers':
    {
       ...
    },
    'requestContext':
    {
       ...
    },
    'body': '<base64 encoded string is here>',
    'isBase64Encoded': True
}

但是,一旦我嘗試返回正文,就會收到以下錯誤(包括多個示例,它們都返回相同的錯誤)。

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"
  ]
}

有任何想法嗎?

KeyError表示您正在嘗試訪問 Python 字典中不存在的鍵。

根據文檔:“API Gateway 使用包含 HTTP 請求的 JSON 表示的事件調用您的 function。”

我認為正在發生的事情是當您返回str(event)時,它只返回 json 事件的字符串化版本。 但是,當您嘗試訪問處理程序中的event[body]而不首先在 json 上運行json.loads()時,您會得到上面的KeyError 我通常首先在我的所有處理程序中運行json.loads()然后將其分配給data object (這是一個 Python 字典),如下所示:

data = json.loads(event["body"])

然后我可以使用那個身體:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM