我希望能够对HTTPS服务器使用并行请求。目前,我使用的是PyCURL,但它不能在不同的句柄之间重用相同的SSL会话ID,每个句柄每次只能处理一次下载/上传。
考虑到协商需要花费时间(特别是因为使用了客户端证书),重新使用id(因为浏览器可以从Web并行下载少量资源),这可能会提高性能。
那么,现在有人关于PyCURL的一些解决方法,或支持它的替代HTTP模块吗? httplib似乎也不起作用。
答案 0 :(得分:1)
目前无法轻松访问重用会话ID here,我还没有听说过任何简单的解决方案 - 但它应该只是在初始握手后保存您的上下文并重新使用它。
PyOpenSSL暴露了这些机制,但其水平低于大多数人想要的水平。我把钱花在以下一系列事件上:
openssl s_client -connect HOST:443
您可以打印出各种好的诊断内容(例如您的SSL会话ID),这样您就可以在当前问题的范围之外进行验证。
一旦你有了这个,httplib的SSL支持非常简单,HTTPSConnection是一个非常薄的HTTPConnection包装器(只有两个扩展类的方法。你要修改的是 connect 。
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)