urlopen error和SSLError: 报错[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed

时间:2021-12-03 20:39:56

在使用requests或者urllib访问某网站时,提示如下错误,Python版本为3.6。

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)

或者 urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)>

经过搜索,urllib或requests在打开https站点是会验证证书。 

简单的处理办法是在get方法中加入verify参数,并设为false。

response = requests.get(url,verify=False)

问题到此为止还没结束,取消SSL验证又带来一个新问题。出现了警告信息,这个锅是urllib3的。

InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. 
  • 1

虽然不是错误,但是在捕捉异常时,默认会出问题,为了不影响原有流程,应该去掉这些警告信息。

from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
  • 1
  • 2

或者直接取消所有urllib3的警告

requests.packages.urllib3.disable_warnings()