如何使用Python中的请求处理<toomanyredirects:exceeded =“”30 =“”redirects。=“”>异常?

时间:2017-04-15 00:48:54

标签: python url python-requests

我已经使用了具有良好结果的请求但是使用此特定网址,我得到了重定向循环中断。

s = requests.Session()
page = s.get('http://pe.usps.gov/text/pub28/28apc_002.htm')
tree = html.fromstring(page.content)
street_type = tree.xpath(r"//*[@id='ep533076']/tbody/tr[2]/td[1]/p/a")
print(street_type)

我特别想知道是否有办法为请求分配标头以避免重定向。我测试了实际的网址,看起来很有效。

由于

1 个答案:

答案 0 :(得分:3)

重定向是服务器发送的响应。它通常是HTTP <301><302>响应,其中显示“嘿,我知道您在寻找什么,它就在这里......”然后向您发送一个新的地方。是的,这些可以链接在一起,是的,你可以在循环中结束。这就是最大重定向限制的目的。

您可以使用以下方法设置请求中允许的重定向数量:

s.max_redirects = 50   # the default is 30

但这不会解决问题。在这种特殊情况下,服务器正在寻找您正在使用的浏览器类型,并在找不到所需内容时重定向您。您可以通过在标题中添加user-agent字段来模仿浏览器。

推荐用法:将标头设置为单个请求的通用浏览器

session.get(url, headers={'user-agent': 'My app'})

# returns:
<Response [200]>

原始发布:设置整个会话的标头,这不一定是您想要的。

s.headers = {'user-agent': 'some app'}
s.get('http://pe.usps.gov/text/pub28/28apc_002.htm')

# returns:
<Response [200]>