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

时间:2025-02-23 20:10:19

完整报错是:: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:xxx)>

解决方法

在使用(url)前,添加代码:

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

问题解析

这是因为访问的网站是https://,需要SSL认证,而直接用urllib会导致本地验证失败(具体原因未查明),所以使用ssl._create_unverified_context关闭认证

报错重现

在执行到request = (url, data)时报错,取消掉这行向上两行的注释,即可解决问题

import json
import urllib


def baidu_search():
    url = "/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()