官方文檔參考地址:html
https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings安全
針對SSL Warnings,urllib3根據不一樣級別的證書校驗有不一樣級別的警告,針對這些不一樣的場景有如下幾種不一樣的解決辦法服務器
1.不安全的請求警告ide
當在沒有啓用證書驗證的狀況下對HTTPS URL進行請求時,就會發生這種狀況。解決辦法以下:ui
參考官方地址:https://urllib3.readthedocs.io/en/latest/user-guide.html#sslurl
urllib3沒有對HTPPS請求作校驗,爲了啓用證書驗證,須要安裝一組root證書,最簡單也最現實的實現方法是用certifi包,包含Mozilla的root證書包spa
安裝方式:1)、pip install certifi 或者 2)、pip install urllib3[secure]日誌
安裝好後,當發送請求時,能夠經過建立PoolManager進行證書驗證code
# _*_ encoding:utf-8 _*_ import requests import urllib3 import certifi http = urllib3.PoolManager( cert_reqs = 'CERT_REQUIRED', ca_certs = certifi.where() ) #無異常 http.request('GET','https://www.baidu.com/') #有異常 http.request('GET','https://expired.badssl.com') #urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='expired.badssl.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)'),)) #報錯以下 r = requests.get('https://www.baidu.com/') #requests.exceptions.SSLError: HTTPSConnectionPool(host='www.baidu.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1,
u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)'),))
二、不安全的平臺警告htm
這種狀況發生在具備過期ssl模塊的Python 2平臺上。這些舊的ssl模塊可能會致使一些不安全的請求,從而在它們失敗的地方得到成功,並在它們應該成功的地方請求失敗。遵循pyOpenSSL指南來解決這個警告。
官方文檔參考地址:https://urllib3.readthedocs.io/en/latest/user-guide.html#ssl-py2
pyOpenSSL官方地址:https://pyopenssl.readthedocs.io/en/latest/
這發生在Python 2版本上,比2.7.9大。這些老版本缺乏SNI的支持。這可能致使服務器顯示客戶認爲無效的證書。遵循pyOpenSSL指南來解決這個警告。
注:若是在確認該HTTPS請求是安全的,能夠訪問時,能夠經過如下方法取消警告
import urllib3 urllib3.disable_warnings()#同時能夠經過如下方式抓取日誌logging.captureWarnings(True)