Python request超時和重試

2022-07-31 08:15:09 字數 2805 閱讀 4102

python+request超時和重試

一、什麼是超時?

1、連線超時

連線超時指的是沒連線上,超過指定的時間內都沒有連線上,這就是連線超時。(連線時間就是httpclient傳送請求的地方開始到連線上目標主機url位址的時間)

2、讀取超時

讀取超時表示的是連線上了,但是讀資料時超過了指定的時間範圍,這就是讀取超時(讀取時間就是httpclient已經連線到了目標伺服器,然後進行內容資料的獲取的時間)

二、為什麼要設定重試?

比如連線超時,程式就一直處於無響應狀態。這時我們需要去不斷重試連線,但也不可能是無止境的去重試,所以需要設定乙個timeout超時時間。在timeout超時時間內如果無法連線到目標主機url位址,就返回乙個異常錯誤(將這個連線超時的的特殊url寫到log日誌中,方便管理員檢視;讀取的資料量大,或者是目標伺服器本身的問題(比如讀取資料庫慢,併發量大等...)也會影響讀取時間也可以設定讀取超時就返回報錯。方便業務管理和問題定位)

1-1 連線超時案例(原始)

import

requests

url = '

'r =requests.get(url)

print(r.text)

執行結果:

a new connection: [winerror 10060] 由於連線方在一段時間後沒有正確答覆或連線的主機沒有反應,連線嘗試失敗。'

,))

由1-1案例可以看到因為連線超時,報了乙個connectionerror連線異常。所以為了防止程式因為連線超時報異常導致程式停止執行。我們就使用try……except……做乙個異常處理。

1-2 連線超時案例(加requests異常處理)

import

requests

import

time

url = '

'try

:

print(time.strftime('

%y-%m-%d %h:%m:%s'))

r =requests.get(url)

except

requests.exceptions.connectionerror as e:

print("

連線超時")

print(time.strftime('

%y-%m-%d %h:%m:%s

'))

執行結果:

2019-09-24 16:54:50連線超時

2019-09-24 16:55:11

由1-2案例可以看出,使用try……except……異常處理後,沒有再報錯。並且可以看出缺省的超時時間是21秒

1-3連線超時案例(修改預設超時時間)

import

requests

import

time

url = '

'try

:

print(time.strftime('

%y-%m-%d %h:%m:%s'))

r = requests.get(url,timeout=5)#

timeout修改了超時時間,以秒為單位

except

requests.exceptions.connectionerror as e:

print("

連線超時")

print(time.strftime('

%y-%m-%d %h:%m:%s

'))

執行結果:

2019-09-24 17:16:52連線超時

2019-09-24 17:16:57

由案例1-3得出,設定timeout=5後,預設超時時間被修改成了5秒。所以當碰到一些頁面請求時間相應時間過長的情況下,我們可以適當的延長超時時間來達到成功訪問頁面

1-4連線超時案例(設定多次請求次數)

設定重試次數為3次

連線失敗,該url可能被牆掉了

')

執行結果:

連線失敗,該url可能被牆掉了

參考文件:設定requests中的重複請求) 、 2.18.1中文文件中介面卡和請求超時)

python request鍵值判斷

if request.request.has key 鍵值 httprequest物件的屬性 參考 表 h 1.httprequest物件的屬性 屬性 描述path 表示提交請求頁面完整位址的字串,不包括網域名稱,如 music bands the beatles method 表示提交請求使用的h...

python request模組學習

python request模組學習 安裝 使用 1 get 2 post 3 put 4 delete 5 head 6 options 為url傳遞引數 payload res requests.get params payload res.url u key2 value2 key1 valu...

python request模組學習

安裝 使用 1 get 2 post 3 put 4 delete 5 head 6 options payload res requests.get params payload res.url u key2 value2 key1 value 檢視響應內容 res requests.get re...