【问题标题】:Requests.exceptions.SSLError: Errno 185090050Requests.exceptions.SSLError: Errno 185090050
【发布时间】:2015-01-30 08:34:03
【问题描述】:

我正在尝试在 .exe 中创建 .py。在 .py 中,应用程序运行良好,但在使用 py2exe 在 .exe 中构建它后,出现此错误:

Traceback (most recent call last):
File "filename.py", line 210, in <module>
File "requests\api.pyc", line 55, in get
File "requests\api.pyc", line 44, in requests
File "requests\sessions.pyc", line 461, in request
File "requests\sessions.pyc", line 567, in send
File "requests\adapters.pyc", line 399, in send
requests.exceptions.SLLError: [Errno 185090050] _ssl.c:344: error: 0B084002:x509 certificate routines: X509_load_cert_crl_file:system lib

文件中的第 210 行是这样的

r2 = requests.get('https://www.hitbox.tv/api/chat/servers', timeout=timeoutDefault)

setup.py 是这样的:

from distutils.core import setup
import py2exe

setup(console=['filename.py'])

我该如何解决这个问题?

【问题讨论】:

标签: python ssl py2exe


【解决方案1】:

requests 模块(或者实际上是它下面的urllib3)无法打开 CA 证书文件。

如果不想验证服务器的证书,可以将调用改为:

r2 = requests.get('https://www.hitbox.tv/api/chat/servers', 
                  timeout=timeoutDefault, verify=False)

如果您关心证书(并且应该),请确保 CA 证书文件与您的应用程序捆绑在一起。根据requests 文档:

您还可以通过验证 CA_BUNDLE 文件的路径以供私有 证书。您还可以设置 REQUESTS_CA_BUNDLE 环境变量。

如果您设置了请求也可以忽略验证 SSL 证书 验证为 False。

请看这里:http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification

【讨论】:

  • 谢谢!但我通过从 http 中删除 s 解决了这个问题:D
【解决方案2】:

我通过猴子修补requests 来解决这个问题,以通过cacert.pem

def _monkey_patch_requests():
    orig_send = HTTPAdapter.send
    def _send_no_verify(self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None):
        return orig_send(self, request, stream, timeout, 'cacert.pem' if verify else False, cert, proxies)
    HTTPAdapter.send = _send_no_verify

_monkey_patch_requests()

并将&lt;Python&gt;/Lib/site-packages/certifi/cacert.pem 复制到dist

【讨论】:

  • 无需打补丁。您可以将 cacert.pem 文件的路径作为验证参数的值传递:requests.get('https://www.hitbox.tv/', verify='path/to/cacert.pem')
  • @nmgeek 如果requests.get 调用是在第三方代码中,猴子补丁更容易。
  • 这是公平的 if requests.get 是从第三方代码调用的。在问题中,它位于 filename.py(第 210 行)中,看起来它是 CosminZoRR 应用程序代码的一部分。
猜你喜欢
  • 2015-10-28
  • 2014-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
相关资源
最近更新 更多