解決python打開(kāi)https出現(xiàn)certificate verify failed的問(wèn)題
今天遇到一個(gè)奇怪的問(wèn)題,在用urllib打開(kāi)一個(gè)https鏈接的時(shí)候,出現(xiàn)了一下報(bào)錯(cuò)信息:IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:727),報(bào)錯(cuò)問(wèn)題就是證書(shū)驗(yàn)證失敗,這種情況出現(xiàn)在網(wǎng)站使用的是自簽名證書(shū)或系統(tǒng)根證書(shū)存在問(wèn)題的時(shí)候。
原因:
Python 從 2.7.9版本開(kāi)始,就默認(rèn)開(kāi)啟了服務(wù)器證書(shū)驗(yàn)證功能,如果證書(shū)校驗(yàn)不通過(guò),則拒絕后續(xù)操作;這樣可以防止中間人攻擊,并使客戶端確保服務(wù)器確實(shí)是它聲稱的身份。如果是自簽名證書(shū),由于一般系統(tǒng)的CA證書(shū)中不存在在自簽名的CA證書(shū)內(nèi)容,從而導(dǎo)致證書(shū)驗(yàn)證不通過(guò)。
臨時(shí)解決方案
方案1:通過(guò)環(huán)境部變量設(shè)置,關(guān)閉服務(wù)器證書(shū)驗(yàn)證功能
執(zhí)行以下shell命令(假設(shè)你使用的是bash shell):
echo "export PYTHONHTTPSVERIFY=0" >> ~/.bashrc
source ~/.bashrc
方案2:取消服務(wù)器證書(shū)驗(yàn)證功能(全局影響)
在文件開(kāi)始部分,加入如下代碼:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
方案3:創(chuàng)建取消服務(wù)器證書(shū)驗(yàn)證的context參數(shù)(當(dāng)前請(qǐng)求代碼影響)
使用示例如下:
import ssl context = ssl._create_unverified_context() urllib.urlopen('https://www.baidu.com', context=context)
方案4:requests verify 參數(shù)設(shè)置為False,取消驗(yàn)證功能
使用示例如下:
requests.get(url, verify=False)
方案5:手動(dòng)指定CA證書(shū)(Python3)
使用示例如下:
import urllib
urllib.request.urlopen("https://example.com/some/info", cafile="ca.pem")
當(dāng)系統(tǒng)根證書(shū)存在問(wèn)題的時(shí)候,可以使用 certifi提供的CA證書(shū):
import certifi import urllib urllib.request.urlopen('https://example.com/bar/baz.html', cafile=certifi.where())
補(bǔ)充知識(shí):Python3之關(guān)閉SSL證書(shū)驗(yàn)證
報(bào)錯(cuò)信息:
Traceback (most recent call last):
File "D:\Python36\lib\site-packages\urllib3\contrib\pyopenssl.py", line 441, in wrap_socket
cnx.do_handshake()
File "D:\Python36\lib\site-packages\OpenSSL\SSL.py", line 1806, in do_handshake
self._raise_ssl_error(self._ssl, result)
File "D:\Python36\lib\site-packages\OpenSSL\SSL.py", line 1546, in _raise_ssl_error
_raise_current_error()
File "D:\Python36\lib\site-packages\OpenSSL\_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')]During handling of the above exception, another exception occurred:
https://aweme.snssdk.com/aweme/v1/play/?video_id=v0200f180000bc4e71kd1dr48pievrrg&line=0&app_id=24
因?yàn)榫W(wǎng)址使用了https,所以經(jīng)過(guò)代理時(shí)會(huì)報(bào)錯(cuò);
解決方案:
#參數(shù):verify=False html = requests.get(item_url, headers=headers, verify=False) # print(html.content)
以上這篇解決python打開(kāi)https出現(xiàn)certificate verify failed的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python Http請(qǐng)求json解析庫(kù)用法解析
- python3從網(wǎng)絡(luò)攝像機(jī)解析mjpeg http流的示例
- 基于Python模擬瀏覽器發(fā)送http請(qǐng)求
- Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程
- Python實(shí)現(xiàn)http接口自動(dòng)化測(cè)試的示例代碼
- 詳解用python -m http.server搭一個(gè)簡(jiǎn)易的本地局域網(wǎng)
- Python如何實(shí)現(xiàn)自帶HTTP文件傳輸服務(wù)
- Python3自定義http/https請(qǐng)求攔截mitmproxy腳本實(shí)例
- 解決Python發(fā)送Http請(qǐng)求時(shí),中文亂碼的問(wèn)題
- Python HTTP下載文件并顯示下載進(jìn)度條功能的實(shí)現(xiàn)
- 如何基于Python + requests實(shí)現(xiàn)發(fā)送HTTP請(qǐng)求
- 如何用python實(shí)現(xiàn)一個(gè)HTTP連接池
相關(guān)文章
在langchain中對(duì)大模型的輸出進(jìn)行格式化實(shí)現(xiàn)
這篇文章主要為大家介紹了在langchain中對(duì)大模型的輸出進(jìn)行格式化實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11Python中實(shí)現(xiàn)三目運(yùn)算的方法
這篇文章主要介紹了Python中實(shí)現(xiàn)三目運(yùn)算的方法,本文用and/or 運(yùn)算符模擬實(shí)現(xiàn)三目運(yùn)算,需要的朋友可以參考下2015-06-06關(guān)于Python3 lambda函數(shù)的深入淺出
今天小編就為大家分享一篇關(guān)于Python3 lambda函數(shù)的深入淺出,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11opencv python 對(duì)指針儀表讀數(shù)識(shí)別的兩種方式
這篇文章主要介紹了opencv python 對(duì)指針儀表讀數(shù)識(shí)別的兩種方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Python連接PostgreSQL數(shù)據(jù)庫(kù)的方法
大家應(yīng)該都有所了解,python可以操作多種數(shù)據(jù)庫(kù),諸如SQLite、MySql、PostgreSQL等,這里不對(duì)所有的數(shù)據(jù)庫(kù)操作方法進(jìn)行贅述,只針對(duì)目前項(xiàng)目中用到的PostgreSQL做一下簡(jiǎn)單介紹,主要是Python連接PostgreSQL數(shù)據(jù)庫(kù)的方法。有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-11-11Pytorch+PyG實(shí)現(xiàn)EdgeCNN過(guò)程示例詳解
這篇文章主要為大家介紹了Pytorch+PyG實(shí)現(xiàn)EdgeCNN過(guò)程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04淺談PyQt5中異步刷新UI和Python多線程總結(jié)
今天小編就為大家分享一篇淺談PyQt5中異步刷新UI和Python多線程總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12