Corrigindo erro de certificado SSL em exe compilado com py2exe (ou PyInstaller)
Acabei de terminar de testar um programa em Python que envolve o login em um site e requer que um cookie CSRF seja definido. Eu tentei empacotá-lo como um exe usandopy2exe
e tenho um erro de soquete. Eu tenho o mesmo problema quando tentoPyInstaller
. Pesquisando no Errno Eu encontrei algumas outras pessoas com o mesmo problema e então eu sei que o problema está relacionado à localização dos certificados SLL.
Este é meusite_agent
classe incluindo as chamadas de registro.
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)
O erro vem noself.agent.get(URL)
linha e o Traceback mostra:
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
Isso significa que o problema está emrequests.adapters
?
Se assim for, posso apenas editá-lo em meus pacotes Python instalados para procurar cacert.pem em outro lugar, reconstruir meu exe compy2exe
ouPyInstaller
, então mude de volta na minha versão instalada do Python?
EDITAR
Agora tenho o programa em execução depois de compilar comPyInstaller
e estabelecendoverify=False
Em tudorequests.get()
erequests.post()
chamadas. Mas o SSL está lá por um motivo e eu realmente gostaria de poder corrigir esse erro antes de permitir que alguém use a ferramenta.