我希望能够对 HTTPS 服务器使用并行请求。目前,我正在使用 PyCURL,但它无法在不同句柄之间重用相同的 SSL session ID,并且每个句柄每次只能处理一次下载/上传。

考虑到协商需要时间(特别是因为使用了客户端证书),重用 id(就像浏览器从 Web 并行下载少量资源时所做的那样)可能会提高性能。

那么,现在有没有人了解 PyCURL 的一些解决方法,或者支持它的替代 HTTP 模块? httplib 似乎也没有完成这项工作。

最佳答案

如前所述 here 重用 session ID 目前不容易访问,我还没有听说过任何简单的解决方案 - 但这应该只是在初始握手后保存上下文并重用它的问题。

PyOpenSSL 公开了这些机制,但比大多数人想要的级别低。我会把钱花在以下一系列事件上:

  • 先弄清楚如何做 session 重用的东西,做一个概念证明。一个有用的工具是 openssl 二进制文件(人们通常用来制作 SSL key )。它有一个内置客户端,您可以像这样使用:


  • 您可以打印出各种好的诊断信息(例如您的 SSL session 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)
    

    关于python - Python 中的 HTTPS session 重用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6489894/

    10-12 22:12