前言

使用Python发送HTTPS请求时,会验证SSL证书,以确保请求的安全性。
但各位虫友可能并不在意这安全性【毕竟….拿到手的才是最真实的】,所以这篇文章就简单讲下 如何禁用取消SSL证书验证

Python取消SSL证书验证,这里主要分为两种情况

  1. 引入的是 import request
  2. 引入的是 import urllib.request

request

设置Verify参数来跳过验证;True(默认) | False

1
2
3
4
import requests

# 设置verify=False参数,不验证SSL证书
re = requests.get(url=url, params=params, headers=headers, verify=False)

urllib.request

Python 升级到 2.7.9 后,Python就引入了一个新特性,用urllib打开HTTPS的链接时,会检验一次SSL证书
如果不做处理的话,可能会抛出 urllib.URLError 异常

系统提示出现的报错

最近在学习web相关的库,编写demo运行后会出现ssl:certificate_verify_failed这个问题,错误日志如下:

1
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)


1
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>

全局取消证书的验证

全局取消证书的验证

  • 优点:简易方便,不再出现证书验证异常
  • 缺点:可能项目整体会出现安全性的相关问题
1
2
3
import ssl

ssl._create_default_https_context = ssl._create_unverified_context

局部取消证书的验证

局部取消证书的验证

  • 优点:不再出现证书验证异常,相对于全局禁用安全性更高
  • 缺点:步骤繁琐
    使用ssl创建未验证的上下文,在url中传入上下文参数
1
2
3
4
5
import ssl

context = ssl._create_unverified_context()
# 将context传入url函数的context参数中即可
text = urlopen('https://www.python.org/jobs', context=context).read().decode()