【问题标题】:Python wrong SSL version using requests使用请求的 Python 错误 SSL 版本
【发布时间】:2021-05-05 06:29:01
【问题描述】:

自从我在新 PC 上安装 python 以来,我一直在努力解决这个问题。 基本上,我有https 请求:

import requests
import ssl

proxies = {
    'https': "https://myproxyhere"
}

r = requests.get('https://example.com', proxies=proxies, timeout=10)     
print(r.text)

在另一台电脑上它工作正常,但在这台电脑上它给出了错误:

```(Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1122)')))```

我安装了openssl 1.1.1hpython 3.9 安装了openssl 版本1.1.1g。但是,我将openssl 降级为1.1.1g,但错误仍然存​​在,我无法使用代理进行 SSL 请求。

请记住,代理不是原因,因为我在另一台笔记本电脑上也有相同的代码,但是我买了一个 Windows Surface Pro,当我重新安装时,我无法制作这项工作。到目前为止,我已经尝试了一切,从尝试其他版本的 openssl 和 python。

有人知道如何解决这个问题吗?

完整的错误回溯:

Traceback (most recent call last):
  File "C:\Users\gonca\Desktop\debug.py", line 9, in <module>
    r = requests.get('https://example.com', proxies=proxies, timeout=10)
  File "C:\Users\gonca\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\api.py", line 76, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\gonca\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\api.py", line 61, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\gonca\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\gonca\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\gonca\AppData\Local\Programs\Python\Python39\lib\site-packages\requests\adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='example.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:1122)')))

编辑: 对于面临这个错误的人,解决方案是降级 requests 模块,它被 bug 了。

【问题讨论】:

  • 这是协议版本问题,不是库版本问题。有时这意味着一方实际上根本没有使用 SSL,而另一方正试图解析不是 SSL 握手的东西,就好像它是一个握手一样。
  • “使用代理”是一个重要的说明,如果您能多说一些,这将非常有帮助。参数proxies 中传递了哪些值?如果您的客户端尝试通过加密连接连接到代理服务器,而代理服务器需要未加密的连接,或者相反......好吧,这就是我想要开始查看的内容。
  • @CharlesDuffy 嘿,那部分不是问题,因为在我的另一台笔记本电脑上,我有 openssl 旧版本和 python 3.85 它工作正常,没有错误版本的错误。仅在这台新计算机上我全新安装了 python 和 openssl。到目前为止,我已经尝试了一切,重新安装 python ,其他 python 版本,安装其他 openssl,但没有运气。 PS:两台机器上的代码完全一样。
  • 如果这是一台 Windows-y 机器,我会担心其中一台机器有防病毒软件之类的东西试图对您的出站连接进行中间人攻击。此错误消息与软件版本完全无关。
  • @Goncalo - 你能多说一下请求模块被“窃听”吗?我假设您的意思是请求代码中的错误导致了您的麻烦。您对该问题的文档有任何参考吗?我问是因为我们有时通过代理使用请求来与 HTTPS 通信,所以如果我们遇到类似情况,我会很感激您提供的任何信息。

标签: python


【解决方案1】:

requests-2.25.1 中有一个错误。我必须降级到 2.24.0

pip install requests==2.24.0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 2018-11-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多