要使用python进行http调用,我的方法是使用requests
。
但是requests
未安装在lambda上下文中。使用import requests
导致未找到模块错误。
另一种方法是使用提供的库from botocore.vendored import requests
。但是AWS不推荐使用此库。
我想避免将依赖项打包在我的lambda zip文件中。
在基于python的lambda中进行REST调用的最聪明的解决方案是什么?
答案 0 :(得分:1)
解决方案1)
自from botocore.vendored import requests
起已弃用,建议的方法是安装依赖项。
$ pip install requests
import requests
response = requests.get('https://...')
另请参阅。 https://aws.amazon.com/de/blogs/developer/removing-the-vendored-version-of-requests-from-botocore/
但是您必须注意将依赖项打包到lambda zip中。
解决方案2)
我的首选解决方案是使用urllib
。它在您的lambda执行上下文中。
https://repl.it/@SmaMa/DutifulChocolateApplicationprogrammer
import urllib.request
import json
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
print(res.status)
print(res.reason)
print(json.loads(res.read()))
解决方案3)
使用http.client
,它也在lambda执行上下文中。
https://repl.it/@SmaMa/ExoticUnsightlyAstrophysics
import http.client
connection = http.client.HTTPSConnection('fakerestapi.azurewebsites.net')
connection.request('GET', '/api/Books')
response = connection.getresponse()
print(response.read().decode())