问题描述
我在通过 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 或类似的东西。