我正在开发一个Python应用程序,它通过restapi将数据发送到web服务器。服务器对API调用使用摘要身份验证。摘要认证背后的理论是分两步对客户机进行认证。初始握手使用令牌,客户机从服务器接收WWW Authenticate头,并创建一个新的nonce和nonce计数。然后用实际的API请求和实际的数据进行第二次调用。
最初的设计是在建立初始连接后保持HTTP客户机的活动状态,以便客户机在nonce生存期内对每个请求增加nonce计数。这将避免每次需要向服务器发送数据时创建线程和重新设置HTTP客户端的开销。应用程序作为服务在AWS中的ec2linux实例上运行。因此,让HTTP客户机保持活动状态是完全正确的。
import requests
sess = requests.Session()
sess.auth = HTTPDigestAuth(USERNAME, TOKEN)
sess.verify = False
sess.mount('https://', HTTPAdapter(max_retries=HTTP_CLIENT_RETRY_MAX))
不过,在下一阶段,我们将考虑使用无服务器的Lambda函数。它的扩展性更好,我们不需要维护EC2服务器。问题是每次运行Lambda函数向服务器发送数据时,它都没有上一个API调用的内存。这意味着它每次都会重新实例化一个HTTP客户机,这是不高效的。我想知道是否有一种方法可以使用Lambda函数使HTTP客户机保持活动状态。