Python使用requests庫(kù)進(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 庫(kù)進(jìn)行請(qǐng)求重試。
1.安裝 requests 庫(kù)
首先需要安裝 requests 庫(kù)??梢允褂?pip 命令進(jìn)行安裝:
pip?install?requests
2.設(shè)置重試次數(shù)
requests 庫(kù)提供了一個(gè) Retry 類(lèi),可以用來(lái)設(shè)置重試次數(shù)、重試間隔等參數(shù)。
下面是一個(gè)簡(jiǎn)單的例子:
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 語(yǔ)句捕獲了請(qǐng)求異常,并打印了異常信息。
6.總結(jié)
本文介紹了如何在 Python 中使用 requests 庫(kù)進(jìn)行請(qǐng)求重試。
通過(guò)設(shè)置重試次數(shù)、重試條件和超時(shí)時(shí)間,可以提高請(qǐng)求的成功率,減少請(qǐng)求失敗的情況。
到此這篇關(guān)于Python使用requests庫(kù)進(jìn)行請(qǐng)求重試的文章就介紹到這了,更多相關(guān)Python requests內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python通用驗(yàn)證碼識(shí)別OCR庫(kù)之ddddocr驗(yàn)證碼識(shí)別
dddd_ocr也是一個(gè)用于識(shí)別驗(yàn)證碼的開(kāi)源庫(kù),又名帶帶弟弟ocr,爬蟲(chóng)界大佬sml2h3開(kāi)發(fā),識(shí)別效果也是非常不錯(cuò),下面這篇文章主要給大家介紹了關(guān)于Python通用驗(yàn)證碼識(shí)別OCR庫(kù)之ddddocr驗(yàn)證碼識(shí)別的相關(guān)資料,需要的朋友可以參考下2022-05-05
python通過(guò)配置文件共享全局變量的實(shí)例
今天小編就為大家分享一篇python通過(guò)配置文件共享全局變量的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題
這篇文章主要介紹了Python解決“argument?after?*?must?be?an?iterable”報(bào)錯(cuò)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Python正則表達(dá)式函數(shù)match()和search()使用全面指南
在Python中,正則表達(dá)式是強(qiáng)大的工具,能夠用于文本匹配、搜索和替換,re模塊提供了許多函數(shù)來(lái)處理正則表達(dá)式,其中match()和search()是兩個(gè)常用的函數(shù),本文將深入探討這兩個(gè)函數(shù)的用法、區(qū)別和示例,幫助你更好地理解它們的功能2024-01-01
python多個(gè)模塊py文件的數(shù)據(jù)共享實(shí)例
今天小編就為大家分享一篇python多個(gè)模塊py文件的數(shù)據(jù)共享實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
python3使用requests模塊爬取頁(yè)面內(nèi)容的實(shí)戰(zhàn)演練
本篇文章主要介紹了python3使用requests模塊爬取頁(yè)面內(nèi)容的實(shí)戰(zhàn)演練,具有一定的參考價(jià)值,有興趣的可以了解一下2017-09-09

