Requests报”requests.exceptions.TooManyRedirects: Exceeded {max_redirects} redirects. “的原因以及解决办法

问题原因

当我们使用Requests库发送请求时,如果服务器返回401、301、302等状态码,Requests库会自动执行重定向操作。但是,如果重定向次数过多,就会抛出“requests.exceptions.TooManyRedirects: Exceeded {max_redirects} redirects”的异常。

这是因为默认情况下,Requests库的最大重定向次数是30次,如果超过这个值,就会触发该异常。

解决办法

针对这个问题,我们可以采取如下的解决办法。

设置最大重定向次数

我们可以通过修改默认的最大重定向次数来解决该问题。可以使用Requests库的max_redirects参数来设置最大重定向次数。例如:

import requests

response = requests.get(url, max_redirects=50)

这样,就将最大重定向次数设置为50次,避免了默认的30次重定向次数限制。

禁止自动重定向

我们也可以禁止Requests库自动执行重定向操作,手动处理跳转。可以通过设置allow_redirects为False来实现。例如:

import requests

response = requests.get(url, allow_redirects=False)

if response.status_code == 302:
    location = response.headers['Location']
    response = requests.get(location)

这样,如果服务器返回302状态码,我们可以手动获取Location字段,然后再次发送请求进行跳转。

手动去重

另一种解决办法是手动去重。例如:

import requests

response = requests.get(url)
visited_urls = [url]

while response.status_code == 302:
    location = response.headers['location']
    if location in visited_urls:
        break

    visited_urls.append(location)
    response = requests.get(location)

print(response.content)

以上代码中,我们首先发送了一个请求,并将访问过的URL保存到visited_urls列表中。当服务器返回302状态码时,我们手动获取Location字段,判断该URL是否已经访问过,如果已经访问过则不再发起请求,直接退出循环,否则将该URL添加到visited_urls列表中,并发起新的请求。当服务器返回200状态码时,就可以正常获取到内容并输出。

总结

以上就是针对“requests.exceptions.TooManyRedirects: Exceeded {max_redirects} redirects”的解决办法。我们可以通过设置最大重定向次数、禁止自动重定向、手动去重等方式来避免该异常的出现。在实际开发中,应该根据具体情况选择合适的解决方案,确保能够正常获取数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Requests报”requests.exceptions.TooManyRedirects: Exceeded {max_redirects} redirects. “的原因以及解决办法 - Python技术站

(1)
上一篇 2023年3月19日
下一篇 2023年3月19日

相关文章

合作推广
合作推广
分享本页
返回顶部