当前位置: 首页 > 面试题库 >

Python请求:requests.exceptions.TooManyRedirects:超过30个重定向

司徒翼
2023-03-14
问题内容

我试图使用python-requests库抓取此页面

import requests
from lxml import etree,html

url = 'http://www.amazon.in/b/ref=sa_menu_mobile_elec_all?ie=UTF8&node=976419031'
r = requests.get(url)
tree = etree.HTML(r.text)
print tree

但我得到了以上错误。(TooManyRedirects)我尝试使用allow_redirects参数但出现相同错误

r = requests.get(url, allow_redirects=True)

我什至尝试发送标头和数据以及url,但是我不确定这是否是正确的方法。

headers = {'content-type': 'text/html'}
payload = {'ie':'UTF8','node':'976419031'}
r = requests.post(url,data=payload,headers=headers,allow_redirects=True)

如何解决此错误。出于好奇,我什至尝试了beautiful-soup4,但出现了不同但相同的错误

page = BeautifulSoup(urllib2.urlopen(url))

urllib2.HTTPError: HTTP Error 301: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Moved Permanently

问题答案:

Amazon会将您的请求http://www.amazon.in/b?ie=UTF8&node=976419031重定向到http://www.amazon.in/electronics/b?ie=UTF8&node=976419031,然后将其重定向到,之后您进入一个循环:

>>> loc = url
>>> seen = set()
>>> while True:
...     r = requests.get(loc, allow_redirects=False)
...     loc = r.headers['location']
...     if loc in seen: break
...     seen.add(loc)
...     print loc
... 
http://www.amazon.in/b?ie=UTF8&node=976419031
http://www.amazon.in/electronics/b?ie=UTF8&node=976419031
>>> loc
http://www.amazon.in/b?ie=UTF8&node=976419031

因此,您的原始URL A不会重定向任何新的URL B,后者会重定向到C,它会重定向到B,依此类推。

显然,Amazon基于User-Agent标头执行此操作,此时,它设置了一个cookie,随后的请求应将其发送回去。以下作品:

>>> s = requests.Session()
>>> s.headers['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36'
>>> r = s.get(url)
>>> r
<Response [200]>

这创建了一个会话(为了易于重用和cookie持久性),以及一个Chrome用户代理字符串的副本。请求成功(返回200响应)。



 类似资料:
  • 我使用spring-cloud-gateway作为API网关,它位于apache层后面,负责预身份验证(单点登录)。这一层向我的spring-cloud-gateway应用程序的传入请求添加了一系列头,当这个数字超过30个头时。我从网关得到HTTP400响应。 我可以使用spring-cloud-gateway-sample项目模拟相同的400响应,方法是使用这个卷度(所以实际的限制看起来像90)

  • 问题内容: 最近几天,我的网站速度变慢了。我查看了我的错误日志,发现其中很多: 我如何找到造成这种情况的原因? 似乎围绕index.php的循环,除了最后一个是图像,最有可能链接到我的页面之一(而不是索引)中。 我使用的是codeigniter,它是一个mvc框架,所有内容都通过index.php文件,因此很难理解哪里出错了。 显然,它与.htaccess有关(在一些博客中已经提到过)。 这是我的

  • 问题内容: 我在MySQL数据库中有一张表。该表的名称超过30个字符,我想在Oracle 11g中创建相同的表,但是Oracle仅允许名称中最多包含30个字符的表。 我不能将表的名称更改为少于30个字符,因为系统是基于这些表的,如果更改名称,这将花费我很多钱,因此更改表名称不是我的答案正在寻找。 有一个名为的表,当我描述该表时,它说该字段具有数据类型,因此我试图更改该表并制作,但我做不到,这给了我

  • 本文向大家介绍JavaEE通过response实现请求重定向,包括了JavaEE通过response实现请求重定向的使用技巧和注意事项,需要的朋友参考一下  请求重定向指的是一个web资源收到客户端请求后,通知客户端去访问另外一个web资源,这称之为请求重定向。302状态码和location头即可实现重定向。   请求重定向最常见的应用场景就是用户登录。 下面的示例代码从另一个页面重定向到用户登录

  • 我正在尝试使用重定向规则设置静态web托管。在我的应用程序中,任何具有前缀api/(http://web.company.com/api)的请求都应该重定向到具有相同前缀(http://api.company.com/api)的另一个主机。我已按以下方式设置路由规则: 但请求没有被正确重定向。控制台中有两个不同的错误: XMLHttpRequest无法加载http://api.company.co

  • 问题内容: 在尝试为uWSGI中的请求设置超时时,我不确定设置是否正确。似乎有多个超时选项(套接字,接口等),并且不清楚要配置哪个设置或在哪里进行设置。 我正在寻找的行为是延长对REST应用程序的资源层的请求可以花费的时间。 问题答案: 您可能正在寻找 harakiri 参数- 如果请求花费的时间超过指定的harakiri时间(以秒为单位),则该请求将被删除,并且相应的工作程序将被回收。 对于独立