Python使用requests庫進(jìn)行請(qǐng)求重試
在進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),由于網(wǎng)絡(luò)波動(dòng)、服務(wù)器繁忙等原因,可能會(huì)出現(xiàn)請(qǐng)求失敗的情況。
為了提高請(qǐng)求的成功率,我們可以使用請(qǐng)求重試機(jī)制。本文將介紹如何在 Python 中使用 requests 庫進(jìn)行請(qǐng)求重試。
1.安裝 requests 庫
首先需要安裝 requests 庫。可以使用 pip 命令進(jìn)行安裝:
pip?install?requests
2.設(shè)置重試次數(shù)
requests 庫提供了一個(gè) Retry 類,可以用來設(shè)置重試次數(shù)、重試間隔等參數(shù)。
下面是一個(gè)簡單的例子:
import?requests
from?requests.adapters?import?HTTPAdapter
from?requests.packages.urllib3.util.retry?import?Retry
retry_times?=?3??#?設(shè)置重試次數(shù)
retry_backoff_factor?=?0.5??#?設(shè)置重試間隔時(shí)間
session?=?requests.Session()
retry?=?Retry(total=retry_times,?backoff_factor=retry_backoff_factor)
adapter?=?HTTPAdapter(max_retries=retry)
session.mount('http://',?adapter)
session.mount('https://',?adapter)
response?=?session.get('https://www.example.com')
上面的代碼中,我們首先創(chuàng)建了一個(gè) requests.Session 對(duì)象,然后創(chuàng)建了一個(gè) Retry 對(duì)象,并設(shè)置了重試次數(shù)和重試間隔時(shí)間。
接著,我們創(chuàng)建了一個(gè) HTTPAdapter 對(duì)象,并將其掛載到 session 對(duì)象上。
最后,我們使用 session 對(duì)象發(fā)送了一個(gè) GET 請(qǐng)求。
3.設(shè)置重試條件
除了設(shè)置重試次數(shù)和重試間隔時(shí)間外,我們還可以設(shè)置重試條件。
例如,只有在出現(xiàn)網(wǎng)絡(luò)錯(cuò)誤或服務(wù)器錯(cuò)誤時(shí)才進(jìn)行重試。下面是一個(gè)例子:
import?requests
from?requests.adapters?import?HTTPAdapter
from?requests.packages.urllib3.util.retry?import?Retry
retry_times?=?3??#?設(shè)置重試次數(shù)
retry_backoff_factor?=?0.5??#?設(shè)置重試間隔時(shí)間
session?=?requests.Session()
retry?=?Retry(total=retry_times,?backoff_factor=retry_backoff_factor,?status_forcelist=[500,?502,?503,?504],?method_whitelist=["HEAD",?"GET",?"OPTIONS"])
adapter?=?HTTPAdapter(max_retries=retry)
session.mount('http://',?adapter)
session.mount('https://',?adapter)
response?=?session.get('https://www.example.com')
上面的代碼中,我們?cè)趧?chuàng)建 Retry 對(duì)象時(shí),設(shè)置了 status_forcelist 和 method_whitelist 參數(shù)。
status_forcelist 參數(shù)指定了在出現(xiàn)哪些 HTTP 狀態(tài)碼時(shí)進(jìn)行重試,method_whitelist 參數(shù)指定了在哪些 HTTP 方法下進(jìn)行重試。
4.設(shè)置超時(shí)時(shí)間
在進(jìn)行網(wǎng)絡(luò)請(qǐng)求時(shí),還需要設(shè)置超時(shí)時(shí)間。如果請(qǐng)求超時(shí),可以進(jìn)行重試。
下面是一個(gè)例子:
import?requests
from?requests.adapters?import?HTTPAdapter
from?requests.packages.urllib3.util.retry?import?Retry
retry_times?=?3??#?設(shè)置重試次數(shù)
retry_backoff_factor?=?0.5??#?設(shè)置重試間隔時(shí)間
timeout?=?5??#?設(shè)置超時(shí)時(shí)間
session?=?requests.Session()
retry?=?Retry(total=retry_times,?backoff_factor=retry_backoff_factor,?status_forcelist=[500,?502,?503,?504],?method_whitelist=["HEAD",?"GET",?"OPTIONS"])
adapter?=?HTTPAdapter(max_retries=retry)
session.mount('http://',?adapter)
session.mount('https://',?adapter)
response?=?session.get('https://www.example.com',?timeout=timeout)
上面的代碼中,我們?cè)诎l(fā)送請(qǐng)求時(shí),設(shè)置了 timeout 參數(shù),指定了超時(shí)時(shí)間。
如果請(qǐng)求超時(shí),會(huì)進(jìn)行重試。
5.完整代碼示例
下面是一個(gè)完整的代碼示例,包括設(shè)置重試次數(shù)、重試條件和超時(shí)時(shí)間:
import?requests
from?requests.adapters?import?HTTPAdapter
from?requests.packages.urllib3.util.retry?import?Retry
retry_times?=?3??#?設(shè)置重試次數(shù)
retry_backoff_factor?=?0.5??#?設(shè)置重試間隔時(shí)間
timeout?=?5??#?設(shè)置超時(shí)時(shí)間
session?=?requests.Session()
retry?=?Retry(total=retry_times,?backoff_factor=retry_backoff_factor,?status_forcelist=[500,?502,?503,?504],?method_whitelist=["HEAD",?"GET",?"OPTIONS"])
adapter?=?HTTPAdapter(max_retries=retry)
session.mount('http://',?adapter)
session.mount('https://',?adapter)
try:
????response?=?session.get('https://www.example.com',?timeout=timeout)
????response.raise_for_status()
except?requests.exceptions.RequestException?as?e:
????print(e)
上面的代碼中,我們使用 try-except 語句捕獲了請(qǐng)求異常,并打印了異常信息。
6.總結(jié)
本文介紹了如何在 Python 中使用 requests 庫進(jìn)行請(qǐng)求重試。
通過設(shè)置重試次數(shù)、重試條件和超時(shí)時(shí)間,可以提高請(qǐng)求的成功率,減少請(qǐng)求失敗的情況。
到此這篇關(guān)于Python使用requests庫進(jìn)行請(qǐng)求重試的文章就介紹到這了,更多相關(guān)Python requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python批量查詢關(guān)鍵詞微信指數(shù)實(shí)例方法
在本篇文章中小編給大家整理的是關(guān)于Python批量查詢關(guān)鍵詞微信指數(shù)實(shí)例方法以及相關(guān)代碼,需要的朋友們可以跟著學(xué)習(xí)下。2019-06-06
Python輸出由1,2,3,4組成的互不相同且無重復(fù)的三位數(shù)
這篇文章主要介紹了Python輸出由1,2,3,4組成的互不相同且無重復(fù)的三位數(shù),分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02
django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例
今天小編就為大家分享一篇django請(qǐng)求返回不同的類型圖片json,xml,html的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05

