我的意思是,如果我访问“www.yahoo.com/thispage”,雅虎已设置过滤器将/ thispage重定向到/ thatpage。因此,每当有人访问/ thispage时,他/她将登陆/该页面。
如果我使用httplib / requests / urllib,它会知道有重定向吗?什么错误页面? 无论何时找不到页面,有些网站都会将用户重定向到/ errorpage。
答案 0 :(得分:16)
使用requests
,您可以获得响应对象的.history
属性中任何重定向的列表。它返回一个Python列表。有关详情,请参阅documentation。
答案 1 :(得分:10)
要防止请求重定向,请使用:
r = requests.get('http://www.yahoo.com/thispage', allow_redirects=False)
如果它确实是重定向,您可以在r.headers ['location']中检查重定向目标位置。
答案 2 :(得分:2)
接受的答案是正确的第一个选项,但在某些情况下,如果网站使用元标记重定向,则一旦重定向,它们也会指定规范链接。在此示例中,让我尝试从维基百科请求http://en.wikipedia.org/wiki/Google_Inc_Class_A,这是一个重定向的网址。
>> request = requests.get('http://en.wikipedia.org/wiki/Google_Inc_Class_A')
我检查并且:
>> request.history
[]
另一种方法是尝试拉出规范网址,该网址应该包含您已被重定向到的内容。 (注意我也在这里使用BeautifulSoup)
>> soup = BeautifulSoup(request._content)
>> canonical = soup.find('link', {'rel': 'canonical'})
>> canonical['href']
'http://en.wikipedia.org/wiki/Google'
哪个匹配您在此特定情况下重定向到的网址。所以要清楚,这是一个丑陋的第二选择,但如果一切都失败,值得尝试。
答案 3 :(得分:1)
这取决于他们如何进行重定向。 “正确”的方式是返回重定向的HTTP状态代码(301/302/303)。 “错误”的方法是在HTML中放置一个刷新元标记。
如果他们做前者,requests
将透明地处理它。请注意,任何合理的错误页面重定向仍会显示错误状态代码(例如404),您可以将其检查为response.status_code
。