完整报错是:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:xxx)>
解决方法
在使用urllib.request.Request(url)前,添加代码:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
问题解析
这是因为访问的网站是https://,需要SSL认证,而直接用urllib会导致本地验证失败(具体原因未查明),所以使用ssl._create_unverified_context关闭认证
报错重现
在执行到request = urllib.request.Request(url, data)时报错,取消掉这行向上两行的注释,即可解决问题
import json
import urllib
def baidu_search():
url = "https://www.baidu.com/s?"
data = {"wd": "啊哈"}
data = json.dumps(data).encode('GBK')
# import ssl
# ssl._create_default_https_context = ssl._create_unverified_context # 如果不添加这两行,下一行报错
request = urllib.request.Request(url, data)
response = urllib.request.urlopen(request)
content = response.read()
print(str(content))
if __name__ == '__main__':
baidu_search()

这篇博客介绍了在Python中遇到SSL证书验证失败的错误时如何解决。通过导入ssl模块并设置_create_default_https_context为_create_unverified_context,可以跳过HTTPS证书验证,从而避免urllib请求时的URLError。这种方法适用于开发环境,但在生产环境中应谨慎使用,因为它可能带来安全隐患。
5291

被折叠的 条评论
为什么被折叠?



