为了账号安全,请及时绑定邮箱和手机立即绑定

修复使用py2exe(或PyInstaller)编译的exe中的SSL证书错误

修复使用py2exe(或PyInstaller)编译的exe中的SSL证书错误

慕田峪7331174 2021-03-29 08:55:03
我刚刚完成了一个Python程序的测试,该程序涉及登录网站并需要设置CSRF cookie。我尝试将其打包为exepy2exe并收到套接字错误。我尝试使用时遇到相同的问题PyInstaller。搜寻Errno时,我发现其他一些人也遇到相同的问题,因此我知道问题与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显示: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\build\pyi.win32\autoresponder\out00-PYZ.pyz\requests.sessions", line 350, in get  File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\build\pyi.win32\autoresponder\out00-PYZ.pyz\requests.sessions", line 338, in request  File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\build\pyi.win32\autoresponder\out00-PYZ.pyz\requests.sessions", line 441, in send  File "C:\pyinstaller-2.0\pyinstaller-2.0\autoresponder\build\pyi.win32\autoresponder\out00-PYZ.pyz\requests.adapters", line 331, in sendrequests.exceptions.SSLError: [Errno 185090050] _ssl.c:336: error:0B084002:x509certificate routines:X509_load_cert_crl_file:system lib这是否意味着问题出在requests.adapters哪里?如果是这样,我可以在已安装的Python软件包中对其进行编辑以在其他地方查找cacert.pem,用py2exe或重建我的exe PyInstaller,然后在已安装的Python版本中将其更改回吗?
查看完整描述

3 回答

?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

如果使用“请求”模块,则可以轻松解决。


1)将以下代码放在使用“ requests”模块的主python文件中


os.environ['REQUESTS_CA_BUNDLE'] = "certifi/cacert.pem"

2)在存在exe的可分发文件夹中,创建一个名为“ certifi”的文件夹,并将“ cacert.pem”文件放入其中。


3)您可以通过以下方式找到“ cacert.pem”文件


pip install certifi


import certifi

certifi.where()

太棒了..现在您的可分发内容包括必要的证书,以验证ssl调用。


查看完整回答
反对 回复 2021-04-02
  • 3 回答
  • 0 关注
  • 280 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号