AWS lambda 使用 Python 获取 http 方法

问题描述

我在通过 api 网关调用 aws lambda 时无法使用 http 方法。我在 api gateway 中创建了一个 REST api,它调用一个 lambda 函数。在 lambda 函数中,我想要两个函数一个用于 POST 请求,一个用于 GET 请求。我无法从事件中获取方法。在其他线程中,答案通常仅适用于 javascript 或 java。

我从终端运行以下 curl 命令: curl "https://myurl/endpoint" 我还尝试通过高级休息客户端发送 GET 请求。

这是我想要做的:

def lambda_handler(event,context):

method = event['httpMethod']
if method == "GET":
    return get_function()
if method == "POST":
    return post_function()

运行上述代码会产生 keyError。 我也试过这个:

method = event['requestContext']['http']['method']

我尝试像这样打印事件本身 method = event。我从中得到的只有 {},无论是在响应中还是在 cloudwatch 中。

如何读取请求中的http方法

解决方法

下面的代码应该可以在 Python 3.7 运行时运行。当然,您可以改进代码,但它会为您提供所需的内容。

    reqcontxt = event.get("requestContext")
    httpprtcl = reqcontxt.get("http")
    methodname = httpprtcl.get("method")
    print('### http method name ###' + str(methodname))

谢谢。

雇佣

,

在@Marcin 的帮助下,我了解到我必须在集成请求中勾选“使用 Lambda 代理集成”选项。没有它,我的请求不会将任何方法或标头数据传递给 lambda。 要么是这样,要么我需要在我的应用程序中添加更多代码来定义方法,但是当我使用 curl 进行测试时,我没有在请求中添加 -X GET 或类似的东西。