更新時(shí)間:2023-09-28 來(lái)源:黑馬程序員 瀏覽量:
大多數(shù)網(wǎng)站中都加人了SSL證書,以實(shí)現(xiàn)數(shù)據(jù)信息在瀏覽器和服務(wù)器之間的加密傳輸,保證雙方傳遞信息的安全性。SSL證書是一種數(shù)字證書,類似于駕駛證、護(hù)照和營(yíng)業(yè)執(zhí)照的電子副本,由受信任的數(shù)字證書頒發(fā)機(jī)構(gòu)CA在驗(yàn)證服務(wù)器身份后頒發(fā),具有服務(wù)器身份驗(yàn)證和數(shù)據(jù)傳輸加密功能。
當(dāng)使用Requests 調(diào)用請(qǐng)求函數(shù)發(fā)送請(qǐng)求時(shí),由于請(qǐng)求函數(shù)的verify參數(shù)的默認(rèn)值為True.所以每次請(qǐng)求網(wǎng)站默認(rèn)都會(huì)進(jìn)行SSL證書的驗(yàn)證。不過(guò),有些網(wǎng)站可能沒(méi)有購(gòu)買SSL證書,或者SSL證書失效。程序訪問(wèn)這類網(wǎng)站時(shí)會(huì)因?yàn)檎也坏絊SL證書而拋出SSLError異常。例如,使用Requests請(qǐng)求國(guó)家數(shù)據(jù)網(wǎng)站,具體代碼如下。
import requests base url = 'https://data.stats.gov.cn/' header = { 'User-Agent': 'Mozilla/5.0 (Nindows NT 6.1; Win64; x64' 'AppleWebKit/537.36 (KHTML, like Gecko)' 'Chrome/90.0.4430.212 Safar1/537.36') # 發(fā)送GET請(qǐng)求 response = requests.get (base_url, headers=header) print (response.status_code)運(yùn)行代碼,程序拋出SSLError異常,具體內(nèi)容如下。
...... requests.exceptions.SSLError: HTTPSConnectionPool (host='data.stats.gov.cn', port= 443): Max retries exceeded with url: / (Caused by SSLError(SSLCert Verification Error(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)')))
這時(shí)需要主動(dòng)關(guān)閉SSL驗(yàn)證,即在調(diào)用getO函數(shù)時(shí)將verify參數(shù)設(shè)置為False,代碼如下。
C:\Users\admin\AppData\Roaming\Python\Python38\site-packages\ur11ib3\ connectionpool.py:981: InsecureRequestNarning: Unverified HTTPS request is being made to host 'data.stata.gov.cn'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage. htmltssl-warnings
這時(shí),如果不希望收到警告信息,則可以采用如下方式消除警告信息。
import urllib3 urllib3.disable warnings()
再次運(yùn)行程序,發(fā)現(xiàn)控制臺(tái)中不再輸出上面的警告信息。