requests库的使用—SSL证书验证
现在很多网站要求使用HTTPS协议,但是有些网站可能并没有设置好HTTPS证书,或者网站的HTTPS证书可能并不被CA机构认可,这时这些网站就可能出现SSL证书错误的提示。
例如这个示例网站:https://ssr2.scrape.center/,如果用Chrome浏览器打开它,则会提示“您的连接不是私密连接”这样的错误,如下图所示:
我们可以在浏览器中通过一些设置来忽略证书的验证。但是如果想用requests库来请求这类网站,又会遇到什么问题呢?我们用代码试一下:
import requests
response = requests.get('https://ssr2.scrape.center/')
print(response.status_code)
运行结果如下:
可以看到,直接抛出了SSLError错误,原因是我们请求的URL的证书是无效的。
那如果我们一定要爬取这个网站,应该怎么做呢?可以使用verify参数控制是否验证证书,如果将此参数设置为False,那么在请求时就不会再验证证书是否有效。如果不设置verify参数,其默认值是True,会自动验证。
于是我们改写代码如下:
import requests
response = requests.get('https://ssr2.scrape.center/',verify=False)
print(response.status_code)
运行结果如下:
不过我们发现其中报了一个警告,它建议我们给它指定证书。我们可以通过设置忽略经过的方式来屏蔽这个警告:
import requests
from requests.packages import urllib3
urllib3.disable_warnings()
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
或者通过捕获警告道日志的方式忽略警告:
import requests
import logging
logging.captureWarnings(True)
response = requests.get('https://ssr2.scrape.center/', verify=False)
print(response.status_code)
运行结果如下: