Ted*_*son 1 python aws-lambda aws-api-gateway
我试过搜索,但我的 googlefu 失败了。
我有一个基本的 python lambda 函数:
def lambda_handler(event, context):
foo = event['bar']
print(foo)
Run Code Online (Sandbox Code Playgroud)
然后我尝试做一个 POST,像这样在 curl 中:
curl -X POST https://correctaddress.amazonaws.com/production/test \
-H 'x-api-key: CORRECTKEY' \
-H 'content-type: application/json' \
-H 'bar: Hello World' \
Run Code Online (Sandbox Code Playgroud)
这KeyError: 'bar'
可能失败了,因为我认为我作为 event['bar'] 传递的不是这样传递的。
我试过event['body']['bar']
也失败了。
如果我这样做event['querystringparameters']['bar']
,如果我使用 GET 会起作用,例如:
curl -X POST https://correctaddress.amazonaws.com/production/test?bar=HelloWorld -H 'x-api-key: CORRECTKEY'
Run Code Online (Sandbox Code Playgroud)
我知道我缺少关于事件字典的一些基本知识,以及它从 POST 中提取的内容,但我似乎找不到正确的文档(不确定它是否会出现在 API 或 Lambda 的文档中)。
我的最终目标是能够使用像这样的请求在 python 中写一些东西:
import requests, json
url = "https://correctaddress.amazonaws.com/production/test"
headers = {'Content-Type': "application/json", 'x-api-key': "CORRECTKEY"}
data = {}
data['bar'] = "Hello World"
res = requests.put(url, json=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)
小智 5
问题在于您执行 curl 命令的方式。
您正在使用 -H (--header) 参数来添加参数。但是您期待 JSON 发布请求。
为此,请将 curl 语句更改为如下所示:
curl -X POST https://correctaddress.amazonaws.com/production/test \
-H 'x-api-key: CORRECTKEY' \
-H 'content-type: application/json' \
--data '{"bar":"Hello World"}' \
Run Code Online (Sandbox Code Playgroud)
这将使 curl 使用适当的正文执行发布请求。
在您的 Python 中,您可以使用类似于以下内容的一些代码将 postdata 作为字典获取:
postdata = json.loads(event['body'])
Run Code Online (Sandbox Code Playgroud)
您应该为无效的 JSON、其他请求类型(例如 GET)等添加一些错误检查。
归档时间: |
|
查看次数: |
1704 次 |
最近记录: |