在Python的requests庫中,處理重定向非常簡單。默認情況下,requests會自動處理HTTP重定向(例如,從HTTP到HTTPS)。如果你想要自定義處理重定向的行為,可以通過設置allow_redirects
參數來實現。
以下是一個簡單的示例:
import requests
url = 'http://example.com' # 這是一個帶有重定向的URL
# 默認情況下,requests會自動處理重定向
response = requests.get(url)
print(response.url) # 輸出最終的URL,可能是重定向后的URL
print(response.status_code) # 輸出HTTP狀態碼,200表示成功,3xx表示重定向
如果你想要禁用自動重定向處理,可以將allow_redirects
參數設置為False
:
import requests
url = 'http://example.com' # 這是一個帶有重定向的URL
# 禁用自動重定向處理
response = requests.get(url, allow_redirects=False)
print(response.url) # 輸出請求的URL,而不是重定向后的URL
print(response.status_code) # 輸出HTTP狀態碼,3xx表示重定向
如果你想要自定義重定向的行為,例如只允許特定的重定向狀態碼,可以使用allow_redirects
參數的rules
參數。rules
參數是一個函數,該函數接受一個RedirectInfo
對象作為參數,并返回一個布爾值,表示是否允許重定向。
以下是一個示例:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
url = 'http://example.com' # 這是一個帶有重定向的URL
# 自定義重定向行為,只允許301和302狀態碼的重定向
def allow_redirects(redirect_info):
return redirect_info.response.status_code in (301, 302)
# 創建一個Session對象,并設置重定向策略
session = requests.Session()
adapter = HTTPAdapter(max_retries=Retry(total=3, redirect=3, status_forcelist=[301, 302], allowed_methods=["HEAD", "GET", "OPTIONS"]))
session.mount("http://", adapter)
session.mount("https://", adapter)
# 使用自定義的Session對象發送請求
response = session.get(url)
print(response.url) # 輸出最終的URL,可能是重定向后的URL
print(response.status_code) # 輸出HTTP狀態碼,200表示成功,3xx表示重定向
在這個示例中,我們創建了一個Session
對象,并使用HTTPAdapter
設置了重定向策略。max_retries
參數表示允許的最大重試次數,redirect
參數表示允許的重定向次數,status_forcelist
參數表示允許的重定向狀態碼列表,allowed_methods
參數表示允許的HTTP方法。