在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方法。