📜  Requests-处理重定向(1)

📅  最后修改于: 2023-12-03 15:04:53.487000             🧑  作者: Mango

Requests-处理重定向

Requests是一个十分流行的Python HTTP库,可用于发送HTTP请求和处理HTTP响应。在进行Web爬虫、API测试、网站监控等操作时,使用Requests库能够简化很多工作。

在本文中,我们将探讨Requests中处理重定向的相关功能。

什么是重定向?

重定向指的是当用户访问一个网页时,服务器返回的响应状态码为301或302,告诉用户需要到另一个URL(重定向目标)继续访问页面。

如果不处理重定向,则Requests库不会自动到重定向目标中去请求数据。但有些场景下,我们需要处理重定向,比如在进行身份认证、爬取动态网页等时。

下面,我们来看看如何处理重定向。

处理重定向
禁止自动重定向

在Requests中,默认情况下,如果响应状态码是301或302,Requests会自动将请求重定向到重定向目标中去。例如:

import requests

response = requests.get('http://www.example.com')

print(response.history)  # ==> [<Response [301]>]

如果想要禁止自动重定向,我们可以通过设置allow_redirects参数的值为False来实现:

import requests

response = requests.get('http://www.example.com', allow_redirects=False)

print(response.history)  # ==> []
允许自动重定向

如果想要允许自动重定向,我们可以将allow_redirects的值设置为True,或者不设置这个参数(默认值即为True):

import requests

response = requests.get('http://www.example.com', allow_redirects=True)

print(response.history)  # ==> [<Response [301]>]
跟随重定向

如果想要跟随重定向,也就是自动到重定向目标中去请求数据,并获取最终的响应结果,我们可以通过response.history列表中的元素来实现:

import requests

response = requests.get('http://www.example.com', allow_redirects=True)

for r in response.history:
    print(r.status_code, r.url)

print(response.status_code, response.url)

输出结果:

301 http://www.example.com/
200 http://www.iana.org/domains/example
调整最大重定向次数

有些情况下,服务器可能会进行很多次重定向才能到达最终的目标页,这时我们需要调整最大重定向次数,以避免无限循环。

在Requests中,默认最大的重定向次数是30次。如果想要调整最大重定向次数,我们可以设置max_redirects参数的值:

import requests

response = requests.get('http://www.example.com', allow_redirects=True, max_redirects=5)
总结

在Requests中处理重定向非常简单,我们只需要设置allow_redirects和max_redirects这两个参数的值即可。对于需要经常进行处理重定向的场景,这个功能能够极大地提高我们的工作效率。