如何使用urllib2获取使用SSLv3加密的网页

2023-11-29

我正在使用 python 2.7,我想获取需要 sslv3 的网页的内容。目前,当我尝试访问该页面时,我收到错误 SSL23_GET_SERVER_HELLO,并且在网络上进行了一些搜索,导致我找到了以下解决方案,该解决方案修复了 Python 3 中的问题

urllib.request.install_opener(urllib.request.build_opener(urllib.request.HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_TLSv1))))

如何在 python 2.7 中获得相同的效果,因为我似乎找不到 HTTPSHandler 类的上下文参数的等效项。


我意识到这个响应已经晚了几年,但我也遇到了同样的问题,并且不想依赖于运行此命令的计算机上安装的 libcurl。希望这对将来发现这篇文章的人有用。

问题是httplib.HTTPSConnection.connect无法指定 SSL 上下文或版本。您可以在开始执行脚本之前覆盖此函数,以获得快速解决方案。

一个重要的考虑因素是,如上所述,此解决方法不会验证服务器证书的有效性。

import httplib
import socket
import ssl
import urllib2

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, ssl_version=ssl.PROTOCOL_TLSv1)

httplib.HTTPSConnection.connect = connect

opener = urllib2.build_opener()
f = opener.open('https://www.google.com/')

*注:此替代方案connect()函数是从 httplib.py 复制/粘贴的,并且简单地修改为指定ssl_version in the wrap_socket() call

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用urllib2获取使用SSLv3加密的网页 的相关文章

随机推荐