要使用 python 进行 http 调用,我的方法是使用requests.
但未requests安装在 lambda 上下文中。使用import requests导致模块未找到错误。
另一种方法是使用提供的 lib from botocore.vendored import requests。但 AWS 已弃用该库。
我想避免在 lambda zip 文件中打包依赖项。
在基于 python 的 lambda 中进行 REST 调用的最明智的解决方案是什么?
Sma*_* Ma 11
解决方案1)
由于from botocore.vendored import requests已弃用,推荐的方法是安装依赖项。
$ pip install requests
Run Code Online (Sandbox Code Playgroud)
import requests
response = requests.get('https://...')
Run Code Online (Sandbox Code Playgroud)
也可以看看。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()))
Run Code Online (Sandbox Code Playgroud)
解决方案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())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14500 次 |
| 最近记录: |