前言“由于連接方在一段時間后沒有正確答復(fù)或連接的主機(jī)沒有反應(yīng),連接嘗試失敗”,這是經(jīng)常遇到的問題 timeoutrequests 發(fā)請求的時候會有個默認(rèn)的超時時間,這個時間在20秒左右 import requests
s = requests.session()
url = "https://www.github.com/"
r = s.request("GET", url=url)
print(r.text) 連不上服務(wù)器會出現(xiàn)異常:requests.exceptions.ConnectionError requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.github.com', port=443): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x0000020F06524AC8>: Failed to establish a new connection: [WinError 10060] 由于連接方在一段時間后沒有正確答復(fù)或連接的主機(jī)沒有反應(yīng),連接嘗試失敗。',)) 如果請求一直沒響應(yīng),進(jìn)入假死狀態(tài),可以加個 timeout 超時時間,達(dá)到這個請求超時時間就結(jié)束,如 15 秒超時。 import requests
s = requests.session()
url = "https://www.github.com/"
r = s.request("GET", url=url, timeout=15)
print(r.text) 這樣拋出的異常是:requests.exceptions.ConnectTimeout raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='www.github.com', port=443): Max retries exceeded with url: / (Caused by ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x000001CF6D2A4A20>, 'Connection to www.github.com timed out. (connect timeout=15)')) 失敗重試 max_retriesRequests 自帶了一個傳輸適配器,也就是 HTTPAdapter。這個適配器使用了強(qiáng)大的 urllib3,為 Requests 提供了默認(rèn)的 HTTP 和 HTTPS 交互。 import requests
from requests.adapters import HTTPAdapter
s = requests.session()
# max_retries=3 重試3次
s.mount('http://', HTTPAdapter(max_retries=3))
s.mount('https://', HTTPAdapter(max_retries=3))
url = "https://www.github.com/"
r = s.request("GET", url=url, timeout=15)
print(r.text) |
|