2014-07-26 11 views
6

Ich versuche, eine .py in .exe zu machen. In Py die Anwendung funktioniert gut, aber nachdem ich es in .exe mit py2exe bauen bekomme ich diesen Fehler:Requests.exceptions.SSLError: Errno 185090050

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 

und die Linie 210 in der Datei ist diese

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

Die setup.py Dies ist :

from distutils.core import setup 
import py2exe 

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

Wie kann ich dieses Problem lösen?

+0

In Verbindung stehende: [Errno 185090050 _ssl.c: 343: Fehler: 0B084002: x509 Zertifikat Routinen: X509_load_cert_crl_file: System lib, nach dem Paketieren zu exe von PyInstaller] (http://stackoverflow.com/questions/23073709/errno-185090050 -ssl-c343-error0b084002x509-Zertifikat-Routinenx509-load-c). – jww

Antwort

5

Das Modul requests (oder tatsächlich urllib3 darunter) kann die CA-Zertifikatsdatei nicht öffnen.

Wenn Sie das Zertifikat des Servers nicht überprüfen möchten, können Sie den Anruf ändern:

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

Wenn Sie über Zertifikate kümmern (und sollten), stellen Sie sicher, dass CA certs Datei mit gebündelt Ihre Bewerbung. Nach Angaben der requests Dokumentation:

You can also pass verify the path to a CA_BUNDLE file for private certs. You can also set the REQUESTS_CA_BUNDLE environment variable.

Requests can also ignore verifying the SSL certificate if you set verify to False.

Siehe hier: http://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification

+1

Danke! Aber ich löste das Problem, indem ich die s von http lösche: D – Cosmin

+6

Normalerweise eine schlechte Idee ... – dopatraman

1

ich um dieses von Affen-Patching arbeitete requestscacert.pem weitergeben müssen:

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() 

und Kopieren <Python>/Lib/site-packages/certifi/cacert.pem zu dist.

+0

Es gibt keine Notwendigkeit, den Code zu patchen. Sie können den Pfad zur Datei cacert.pem als Wert des Parameters verify übergeben: 'requests.get ('https://www.hitbox.tv/', verify = 'path/to/cacert.pem')' – nmgeek

+0

@nmgeek Wenn der Aufruf "requests.get" im Code von Drittanbietern ist, ist Affe-Patching einfacher. – valtron

+0

Das ist fair _if_ requests.get wird von Drittanbieter-Code aufgerufen. In der Frage ist es in filename.py (in Zeile 210) und das sieht aus wie es Teil des Anwendungscodes von CosminZoRR ist. – nmgeek