Python requests 詳解超時和重試

2021-09-26 19:47:08 字數 3219 閱讀 3007

網路請求不可避免會遇上請求超時的情況,在 requests 中,如果不設定你的程式可能會永遠失去響應。

超時又可分為連線超時和讀取超時。

連線超時指的是在你的客戶端實現到遠端機器埠的連線時(對應的是connect()),request 等待的秒數。

import time

import requests

url = ''

print(time.strftime('%y-%m-%d %h:%m:%s'))

try:

html = requests.get(url, timeout=5).text

print('success')

except requests.exceptions.requestexception as e:

print(e)

print(time.strftime('%y-%m-%d %h:%m:%s'))

因為 google 被牆了,所以無法連線,錯誤資訊顯示 connect timeout(連線超時)。

2018-12-14 14:38:25就算不設定,也會有乙個預設的連線超時時間(我測試了下,大概是21秒)。

讀取超時指的就是客戶端等待伺服器傳送請求的時間。(特定地,它指的是客戶端要等待伺服器傳送位元組之間的時間。在 99.9% 的情況下這指的是伺服器傳送第乙個位元組之前的時間)。

簡單的說,連線超時就是發起請求連線到連線建立之間的最大時長,讀取超時就是連線成功開始到伺服器返回響應之間等待的最大時長。

如果你設定了乙個單一的值作為 timeout,如下所示:

r = requests.get('', timeout=5)
這一 timeout 值將會用作 connect 和 read 二者的 timeout。如果要分別制定,就傳入乙個元組:

r = requests.get('', timeout=(3.05, 27))
黑板課爬蟲闖關的第四關正好**人為設定了乙個15秒的響應等待時間,拿來做說明最好不過了。

import time

import requests

url_login = ''

session = requests.session()

session.get(url_login)

token = session.cookies['csrftoken']

session.post(url_login, data=)

print(time.strftime('%y-%m-%d %h:%m:%s'))

url_pw = ''

try:

html = session.get(url_pw, timeout=(5, 10)).text

print('success')

except requests.exceptions.requestexception as e:

print(e)

print(time.strftime('%y-%m-%d %h:%m:%s'))

錯誤資訊中顯示的是 read timeout(讀取超時)。

2018-12-14 15:20:57讀取超時是沒有預設值的,如果不設定,程式將一直處於等待狀態。我們的爬蟲經常卡死又沒有任何的報錯資訊,原因就在這裡了。

一般超時我們不會立即返回,而會設定乙個三次重連的機制。

def gethtml(url):

i = 0

while i < 3:

try:

html = requests.get(url, timeout=5).text

return html

except requests.exceptions.requestexception:

i += 1

其實 requests 已經幫我們封裝好了。(但是**好像變多了...)

print(time.strftime('%y-%m-%d %h:%m:%s'))max_retries為最大重試次數,重試3次,加上最初的一次請求,一共是4次,所以上述**執行耗時是20秒而不是15秒

Python Requests 學習筆記

一直想用 python 做點網路相關的東西,找了下,發現了 requests 庫,現記錄下學習筆記。requests 是什麼 requests 入門 requests 提高 首先,requests 是什麼。requests是乙個封裝了 http 操作和請求的庫,可以很方便的抓取網頁的內容,囧,這個是...

python requests傳送json格式資料

requests是常用的請求庫,不管是寫爬蟲指令碼,還是測試介面返回資料等。都是很簡單常用的工具。但是,我們寫程式的時候,最常用的介面post資料的格式是json格式。當我們需要post json格式資料的時候,怎麼辦呢,只需要新增修改兩處小地方即可。詳見如下 import requests imp...

Python Requests 學習 筆記

在做web題目的時候看到一道這樣的題,要讓我迅速提交,看到別人的writeup 發現要寫python指令碼,於是就來學一下python requests 題目連線 來自網路安全實驗室 該文件的內容來自 pyhon requests 快速入門 r requests.get 網域名稱 其他玩法 r re...