【问题标题】:HTTPS session reuse in PythonPython 中的 HTTPS 会话重用
【发布时间】:2011-06-27 07:38:03
【问题描述】:
我希望能够对 HTTPS 服务器使用并行请求。目前,我正在使用 PyCURL,但它无法在不同句柄之间重用相同的 SSL 会话 ID,并且每个句柄每次只能处理一次下载/上传。
考虑到协商需要时间(特别是因为使用了客户端证书),重用 id(就像浏览器从 Web 并行下载少量资源所做的那样)可能会提高性能。
那么,现在有人知道 PyCURL 的一些解决方法,或者支持它的替代 HTTP 模块吗? httplib 似乎也没有完成这项工作。
【问题讨论】:
标签:
python
https
sessionid
【解决方案1】:
正如here 所指出的,目前无法轻松访问重用会话 ID,我还没有听说过任何简单的解决方案 - 但它应该只是在初始握手后保存您的上下文并重用它的问题。
PyOpenSSL 公开了这些机制,但低于大多数人想要的水平。我会把钱花在以下一系列事件上:
- 首先弄清楚如何进行会话重用,只需进行概念验证即可。一个有用的工具是 openssl 二进制文件(人们通常用来制作 SSL 密钥的那个)。它有一个内置客户端,您可以像这样使用它:
openssl s_client -connect HOST:443
httplib.py - HTTPSConnection 类
def connect(self):
"Connect to a host on a given (SSL) port."
sock = socket.create_connection((self.host, self.port),
self.timeout, self.source_address)
if self._tunnel_host:
self.sock = sock
self._tunnel()
self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file)