python requests timeout參數

首先發一下牢騷: 不管是抄襲還是轉載,有點新東西行不行,一味的轉載有什麼用呢?東西還以那點東西,讓想解決問題的人查看一些一摸一樣的文章,只會浪費查詢者的時間。況且! 有些問題原創者並沒有進行徹底的解答,就一個勁的轉載,抄襲,一連幾個都是一摸一樣的文章,浪費時間。(百度真是夠夠的)(時間就是金錢,效率就是生命。)請各位大佬能引以爲鑑。再次說明:本人所有文章禁止轉載!本人所有文章禁止抄襲!

正文:
1、python 的requests請求都可以使用timeout參數。
2、timeout參數可以傳入一個簡單的浮點數,它將請求的連接部分和讀取部分設爲相同的超時時間。
3、timeout參數也可以傳入一個包含兩個簡單浮點數的元組,用來分別設置請求超時時間和讀取超時時間。

下面來用代碼進行說明:

傳入簡單浮點數:

import requests

# 設置超時時間爲1秒:
r = requests.get("https://gethub.com", timeout=1)
print(r.status_code)
------------------------------------------------------------------------
執行結果:
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='gethub.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x000001B820359248>, 'Connection to gethub.com timed out. (connect timeout=1)'))
因爲在1秒的連接時間內沒有連接到服務器,所以就會報連接超時的錯誤,如上。

上方代碼僅將timeout參數傳入了一個簡單浮點數,這個傳入值不一定是個整數,也可以是0.1,0.05這些浮點數。

傳入元組:

import requests

# 傳入元組將分別作爲連接,讀取的超時時間
r = requests.get("https://baidu.com", timeout=(0.01, 0.01))
print(r.status_code)
------------------------------------------------------------------------
執行結果:
requests.exceptions.ReadTimeout: HTTPSConnectionPool(host='baidu.com', port=443): Read timed out. (read timeout=0.01)
因爲讀取時間設置的比較短,所以產生了讀取超時錯誤

如果想永久等待,可以將timeout的參數值設爲None或者不設置該參數:

r = requests.get("https://baidu.com", timeout=None)
r = requests.get("https://baidu.com")

注: 如果你傳入三個參數,python會以錯誤的方式提示你這個參數都有什麼傳入值如下:

Pass a (connect, read) timeout tuple, or a single float to set both timeouts to the same value
------------------------------------------------------------------------
翻譯:傳遞(連接、讀取)超時元組或單個浮點數,將兩個超時設置爲相同的值

後話: 在《python3 網絡爬蟲開發實戰》的136頁,

r = requests.get('https://taobao.com', timeout=(5,11, 30))

這行代碼的timeout參數的傳入值是有錯誤的,就像上邊說的,這個傳入元組只能是兩個元素,三個元素的傳入是會產生錯誤的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章