python解决urllib发送请求报错:urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED].....>

完整报错是: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()

Guess you like

Origin blog.csdn.net/weixin_35757704/article/details/121060229