如何使用 python 在 AWS lambda 中进行 HTTP 休息调用?

Sma*_* Ma 3 aws-lambda

要使用 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)