gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:35 25 4
gpt4 key购买 nike

我正在使用 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 复制/粘贴的,并简单地修改为在 wrap_socket() 中指定 ssl_version 调用

关于python - 如何使用urllib2获取使用SSLv3加密的网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8039859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com