📅  最后修改于: 2023-12-03 15:05:46.469000             🧑  作者: Mango
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)>
这错误通常发生在使用 urllib
或者 urllib2
这类 Python 官方库进行 HTTPS 请求的时候,通常是因为请求的网站的 SSL 证书未被认可。
忽略证书验证 (不推荐)
可以使用 ssl._create_unverified_context()
来忽略证书验证,但这种做法不安全,因为可能遭受中间人攻击。
import ssl
import urllib.request
context = ssl._create_unverified_context()
response = urllib.request.urlopen(url, context=context)
print(response.status_code)
安装SSL证书或者CA证书
为了验证有效的证书,我们需要将证书提供机构(CA)的根证书添加到 OpenSSL 的根证书列表中。可以通过参考证书提供机构的官方文档或者使用 certifi 模块来安装 SSL 证书或者 CA 证书。
import ssl
import certifi
import urllib.request
# 安装 SSL 证书
ssl_context = ssl.create_default_context(cafile=certifi.where())
response = urllib.request.urlopen(url, context=ssl_context)
print(response.status_code)
关闭SSL
彻底解决 SSL 证书问题的另一种方法是修改网站的服务器配置,停用 SSL 或者采用有效的证书,但是这种方法可能会影响网站的可用性。
import ssl
import urllib.request
context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
context.verify_mode = ssl.CERT_NONE
response = urllib.request.urlopen(url, context=context)
print(response.status_code)
以上是常见的解决方法,但实际情况可因实际情况而不同。了解以上的方法可以帮助你解决类似的问题。