问题原因
当我们使用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技术站