Ich habe gerade ein Python-Programm getestet, das die Anmeldung bei einer Site erfordert und die Einrichtung eines CSRF-Cookies erfordert. Ich habe versucht, es als eine exe mit py2exe
zu packen und bekam einen Socket-Fehler. Ich habe das gleiche Problem, wenn ich mit PyInstaller
versuche. Bei der Suche nach dem Errno habe ich ein paar andere Leute mit dem gleichen Problem gefunden und daher weiß ich, dass das Problem mit dem Standort von SLL-Zertifikaten zu tun hat.Behebung eines SSL-Zertifikatsfehlers in exe, kompiliert mit py2exe (oder PyInstaller)
Dies ist meine site_agent
Klasse einschließlich der Protokollierungsaufrufe.
class site_agent:
self.get_params()
URL = root_url + '/accounts/login/'
# Retrieve the CSRF token first
self.agent = requests.session()
self.agent.get(URL) # retrieves the cookie # This line throws the error
self.csrftoken = self.agent.cookies['csrftoken']
# Set up login data including the CSRF cookie
login_data = {'username': self.username,
'password': self.password,
'csrfmiddlewaretoken' : self.csrftoken}
# Log in
logging.info('Logging in')
response = self.agent.post(URL, data=login_data, headers=hdr)
Der Fehler kommt an der self.agent.get(URL)
Linie und die Traceback zeigt:
Traceback (most recent call last):
File "<string>", line 223, in <module>
File "<string>", line 198, in main
File "<string>", line 49, in __init__
File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\b
uild\pyi.win32\autoresponder\out00-PYZ.pyz\requests.sessions", line 350, in get
File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\b
uild\pyi.win32\autoresponder\out00-PYZ.pyz\requests.sessions", line 338, in requ
est
File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\b
uild\pyi.win32\autoresponder\out00-PYZ.pyz\requests.sessions", line 441, in send
File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\b
uild\pyi.win32\autoresponder\out00-PYZ.pyz\requests.adapters", line 331, in send
requests.exceptions.SSLError: [Errno 185090050] _ssl.c:336: error:0B084002:x509
certificate routines:X509_load_cert_crl_file:system lib
Bedeutet dies, dass das Problem in requests.adapters
ist?
Wenn ja, kann ich es nur in meinen installierten Python-Paketen bearbeiten, um woanders nach cacert.pem zu suchen, meine exe mit py2exe
oder PyInstaller
neu erstellen und dann wieder in meiner installierten Version von Python ändern?
EDIT
ich das Programm läuft mit jetzt haben PyInstaller
nach dem Kompilieren und verify=False
in allen requests.get()
und requests.post()
Gespräche einstellen. Aber SSL gibt es aus einem bestimmten Grund, und ich möchte diesen Fehler wirklich beheben können, bevor jemand das Tool verwenden darf.
http://StackOverflow.com/a/21206079/538284 –