1. 第一種方案
import? requests
requests.get('https://www.zhihu.com/',verify=False)
2.第二種方案
由于python2不支持SNI鳞仙,具體SNI了解轉(zhuǎn):http://blog.csdn.net/makenothing/article/details/53292335如果想python2支持SNI医舆,pip安裝3個模塊:
1.pyOpenSSL
2.ndg-httpsclient
3.pyasn1
然后在使用requests請求前添加如下代碼:
import? urllib3.contrib.pyopenssl
urllib3.contrib.pyopenssl.inject_into_urllib3()
使用第一種方案解決的時候温学,出現(xiàn)以下警告:
InsecureRequestWarning: Unverified HTTPS requestisbeing made. Adding certificate verificationisstrongly advised.
在語句前加上以下代碼即可不會被報錯:requests.packages.urllib3.disable_warnings()?
經(jīng)過試驗測試,第一仲器,二種方案都會繼續(xù)報錯。
繼續(xù)尋找方案(鏈接四):
使用requests下載日志出現(xiàn):
HTTPSConnectionPool(host='***', port=443): Max retries exceeded with url: ******(Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:579)'),))
分析是ssl證書報錯,解決辦法:
1. requests默認是keep-alive的启摄,可能沒有釋放蚌卤,加參數(shù) headers={'Connection':'close'}
requests..get("http://...", headers={'Connection':'close'})
2. 增加連接重試次數(shù):?
requests.adapters.DEFAULT_RETRIES =5
3. 關(guān)閉多余的連接:requests使用了urllib3庫实束,默認的http connection是keep-alive的奥秆,requests設(shè)置False關(guān)閉。
s = requests.session()?
?s.keep_alive = False
操作方法:
s = requests.session()? ? ??
?s.keep_alive =False
4. 不用ssl證書驗證:?
requests.get('https://kennethreitz.org', verify=False)
使用(1,2,3)方法即可解決:
參考:
https://www.zhihu.com/question/40025043
https://blog.csdn.net/k53247l2/article/details/74168894
https://blog.csdn.net/qq_31077649/article/details/79013199
http://www.cnblogs.com/mikeluwen/p/7244161.html