gpt4 book ai didi

Python 请求在某些站点上抛出 SSL 错误

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

编辑 - 已修复 tldr,几年前安装的半旧版本的 python 具有未更新的 ssl 包,无法处理较新的 SSL 证书。在更新 Python 并确保 ssl 包是最新的之后,一切正常。


我是网络抓取的新手,想抓取某个网站,但由于某种原因,我在这个特定网站上使用 Python 的 Requests 包时遇到错误。

我正在研究安全登录以从我的用户配置文件中抓取数据。登录地址可以在这里找到:https://secure.funorb.com/m=weblogin/loginform.ws?mod=hiscore_fo&ssl=0&expired=0&dest=

此时我只是尝试执行简单的任务,例如打印来自 get 请求的文本。以下是我的代码。

import requests

req = requests.get('https://secure.funorb.com/m=weblogin/loginform.ws?mod=hiscore_fo&ssl=0&expired=0&dest=',verify=False)
print req.text

当我运行它时,会抛出一个错误:

 File "/Library/Python/2.7/site-packages/requests/adapters.py", line 512, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: EOF occurred in violation of protocol (_ssl.c:590)

我查看了这个文件以了解发生了什么。看来罪魁祸首是

    except (_SSLError, _HTTPError) as e:
if isinstance(e, _SSLError):
raise SSLError(e, request=request)
elif isinstance(e, ReadTimeoutError):
raise ReadTimeout(e, request=request)
else:
raise

不幸的是,我不太确定如何避免这种情况,我的调试极限在这里。

我的代码在其他安全站点上运行良好,例如 https://bitbucket.org/account/signin/ .我看过大量有关堆栈交换和网络的解决方案,很多人声称添加可选参数“verify=False”应该可以修复这些类型的 SSL 错误(尽管这不是最安全的方法它)。但是正如您从我的代码片段中看到的那样,这对我没有帮助。

如果有人能得到这个工作/就去哪里提供建议,我们将不胜感激。

最佳答案

... lot of people claimed adding in the optional argument "verify=False" should fix these types of SSL errors

添加 verify=False 有助于防止验证证书时出现错误,但不能防止来自服务器的 EOF、握手错误或类似错误。

SSLLabs可以看出对于不支持使用现代密码的 TLS 1.2 的客户端,此特定服务器表现出简单地关闭连接的行为(即“EOF 发生在违反协议(protocol)的情况下”)。虽然您没有指定您使用哪个 SSL 版本,但我希望它是低于 OpenSSL 1.0.1 的版本,这是支持 TLS 1.2 的第一个 OpenSSL 版本。

请检查 ssl.OPENSSL_VERSION 以了解您的代码中使用的版本。如果我是正确的,您唯一的解决方法是升级 Python 使用的 OpenSSL 版本。如何完成取决于您的平台,但已有相关帖子,例如 Updating openssl in python 2.7 .

关于Python 请求在某些站点上抛出 SSL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44294218/

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