Исправление ошибки сертификата SSL в exe, скомпилированном с py2exe (или PyInstaller)
Я только что закончил тестировать программу на Python, которая включает в себя вход на сайт и требует установки файла cookie CSRF. Я попытался упаковать его как exe, используяpy2exe
и получил ошибку сокета. У меня та же проблема, когда я пытаюсь сPyInstaller
, Погуглив ошибки, я нашел несколько других людей с такой же проблемой, и поэтому я знаю, что проблема связана с расположением сертификатов SLL.
Это моеsite_agent
класс, включая запись звонков.
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)
Ошибка приходит наself.agent.get(URL)
линия и трассировка показывает:
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
Означает ли это, что проблема вrequests.adapters
?
Если так, могу ли я просто отредактировать его в моих установленных пакетах Python, чтобы найти cacert.pem где-нибудь еще, пересобрать мой exe с помощьюpy2exe
или жеPyInstaller
, а затем изменить его обратно в моей установленной версии Python?
РЕДАКТИРОВАТЬ
У меня теперь программа работает после компиляции сPyInstaller
и настройкаverify=False
в целомrequests.get()
а такжеrequests.post()
звонки. Но SSL существует по какой-то причине, и я действительно хотел бы иметь возможность исправить эту ошибку, прежде чем позволить кому-либо использовать инструмент.