Python HTTP requests - The first sight

Python http library requests 是個簡單直覺又普及的library,即便如此他也提供進階的use cases.

hooks

可以預先自行調整,決定request處理的項目或事件。通常搭配callback function,例如回傳時印出url, 可以先建立一個
def print_url(r, *args, **kwargs):
    print(r.url)
Call 的時候放在hooks 這dictionary中,就會在request後,接著執行到print_url這個function
>>> requests.get('https://httpbin.org/', hooks={'response': print_url})

實際上hook的概念並非Python獨有,hook function 像是一個interface讓開發者去複寫,客製化自己要的操作。

timeouts

自定義timeout 時間來確保回應的時間是符合自己預期,但每次都自己加參數容易忘記。
requests.get('https://google.com/', timeout=0.001)

Retry

可以利用 HTTPAdapter (request.adapters) 跟Retry (requests.packages.urllib3.util.retry) 去搭配,不僅可以定義max retry的次數,也能只針對return code以及method的型態來做失敗時的retry
retry_strategy = Retry(
    total=3,
    status_forcelist=[429, 500, 502, 503, 504],
    method_whitelist=["HEAD", "GET", "OPTIONS"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
http = requests.Session()
http.mount("https://", adapter)
response = http.get("https://trendmicro.com")


留言

這個網誌中的熱門文章

[專案] 銀行端末系統

如何在MacOS 中自由切換不同Python版本 - pyenv + virtualenv

用 C# 控制 Win7 輸入法