python requests 重试_我可以为requests.request设置最大重试次数吗?
這不僅會改變最大重試次數,而且還會啟用回退策略,使所有http://地址在重試前睡眠一段時間(總共5次):import requests
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
s = requests.Session()
retries = Retry(total=5,
backoff_factor=0.1,
status_forcelist=[ 500, 502, 503, 504 ])
s.mount('http://', HTTPAdapter(max_retries=retries))
s.get('http://httpstat.us/500')
根據documentation for ^{}:如果回退因子為0.1,則sleep()將在重試之間睡眠[0.1s、0.2s、0.4s,…]。如果返回的狀態代碼是500,502,503或504,則還將強制重試。
其他各種Retry選項允許更細粒度的控制:total–允許的重試總數。
connect–要重試的連接相關錯誤數。
read–讀取錯誤時重試多少次。
重定向-要執行的重定向數。
method_whitelist–一組大寫的HTTP方法動詞,我們應該重試。
status_forcelist–一組我們應該強制重試的HTTP狀態代碼。
退避系數-在兩次嘗試之間應用的退避系數。
raise_on_redirect–如果重定向數已用盡,是引發一個MaxRetryError,還是返回一個響應代碼在3xx范圍內的響應。
raise_on_status–類似于raise_on_redirect的含義:如果狀態落在status_forcelist范圍內,并且重試次數已用盡,則是否應引發異常或返回響應。
NB:raise-on-u status是一個相對較新的版本,尚未發布urllib3或請求。raise-on-u status關鍵字參數似乎已使其在python 3.6版本中最多進入標準庫。
要在特定的HTTP狀態代碼上重試請求,請使用status-forcelist。例如,狀態強制列表=[503]將在狀態代碼503上重試(服務不可用)。
默認情況下,重試僅在以下情況下觸發:無法從池中獲取連接。
TimeoutError
HTTPException提升(在Python 3 elsehttplib中從http.client開始)。
這似乎是低級HTTP異常,如URL或protocol not
形狀正確。
SocketError
ProtocolError
注意,這些都是阻止接收常規HTTP響應的異常。如果生成任何常規響應,則不執行重試。如果不使用狀態強制列表,即使是狀態為500的響應也不會重試。
為了使其以更直觀的方式操作遠程API或web服務器,我將使用上面的代碼片段,它強制在狀態500,502,503和504上重試,所有這些狀態在web上并不少見,并且(可能)在足夠長的退避期內可以恢復。
編輯的:直接從urllib3導入{}類。
總結
以上是生活随笔為你收集整理的python requests 重试_我可以为requests.request设置最大重试次数吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求无序序列每个元素最接近的值
- 下一篇: 《浅谈架构之路:前后端分离模式》 - 山