使用Python3解释器在Pycharm中发出https请求时,收到错误消息:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1056)
我倾向于认为这是我的Pycharm配置存在的问题,因为仅当使用任何版本的Python3时,此问题才会在Pycharm中发生。该代码在使用Python2.7的Pycharm中运行良好,并且在命令行中运行Python3则运行良好。
我通过Pycharm尝试使用不同版本的Python3创建新的虚拟环境。所有这些都基于能够成功运行独立于Pycharm的代码的解释器。
此错误的最常见解决方案是运行在Install Certificates.command
处找到的/Applications/Python 3.x/
,但是运行该错误只会确认certifi
程序包已经是最新的。
下面的代码的最后一行引发错误:
headers = {"authuser":username, "authpass":password}
conn = http.client.HTTPSConnection(url)
conn.request("POST",requestpath, headers)
答案 0 :(得分:0)
假设您正在运行Python 3.4.3或更高版本,并且可以不用验证目标就可以,则可以尝试禁用证书和主机名检查:
headers = {"authuser":user, "authpass":pass}
conn = http.client.HTTPSConnection(url, context=ssl._create_unverified_context())
conn.request("POST",requestpath, headers)
摘自https://docs.python.org/3/library/http.client.html上的Python3官方文档:
在版本3.4.3中进行了更改:此类现在执行所有必需的操作 默认情况下,证书和主机名检查。要还原到上一个, 未经验证,行为ssl._create_unverified_context()可以传递给 上下文参数。