詳細(xì)錯(cuò)誤信息:
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)'),))
問題原因:
http連接太多沒有關(guān)閉導(dǎo)致的钧椰。
http的連接數(shù)超過最大限制流炕,默認(rèn)的情況下連接是Keep-alive的,所以這就導(dǎo)致了服務(wù)器保持了太多連接而不能再新建連接栅受。
解決:
- 關(guān)閉多余的連接
import requests
ss = requests.session()
ss.keep_alive = False
- 使用with語句自動(dòng)關(guān)閉連接
# reqeusts文檔:如果你在請求中把 stream 設(shè)為 True族铆,Requests 無法將連接釋放回連接池岩四,除非你 消耗了所有的數(shù)據(jù),或者調(diào)用了 Response.close哥攘。 這樣會(huì)帶來連接效率低下的問題剖煌。如果你發(fā)現(xiàn)你在使用 stream=True 的同時(shí)還在部分讀取請求的 body(或者完全沒有讀取 body),那么你就應(yīng)該考慮使用 with 語句發(fā)送請求逝淹,這樣可以保證請求一定會(huì)被關(guān)閉:
with requests.get('http://httpbin.org/get', stream=True) as r:
# 在此處理響應(yīng)耕姊。
間隔發(fā)送請求
忽略對 SSL 證書的驗(yàn)證(未驗(yàn)證)
import requests
requests.packages.urllib3.disable_warnings() # 忽略錯(cuò)誤(在不影響程序的情況下)
r = requests.get(url, headers=headers, verify=False) # 忽略ssl認(rèn)證