如何获取HTTP重定向目标的URL?

时间:2010-03-01 03:13:25

标签: python http google-app-engine redirect

我正在编写客户端Python单元测试,以验证我的Google App Engine站点上的HTTP 302重定向是否指向正确的页面。到目前为止,我一直在呼叫urllib2.urlopen(my_url).geturl()。但是,我遇到了两个问题:

  1. geturl()返回的网址似乎不包含?k1=v1&k2=v2等网址查询字符串;我怎么能看到这些? (我需要检查我是否正确地将访问者的原始URL查询字符串传递到重定向页面。)
  2. geturl()显示任何其他重定向后的最终到达网址。我只关心第一次重定向(来自我网站的重定向);在此之后,我对任何事情都不了解。例如,我们假设我的网站是example.com。如果用户请求http://www.example.com/somepath/?q=foo,我可能希望将其重定向到http://www.anothersite.com?q=foo。其他网站可能会执行另一个重定向到http://subdomain.anothersite.com?q=foo,我无法控制或预测。如何确保我的重定向正确?

2 个答案:

答案 0 :(得分:5)

使用httplib(并查看响应的返回状态和位置标头)以避免阻碍测试的“自动跟踪重定向”。有一个很好的例子here

答案 1 :(得分:5)

follow_redirects=False提供给fetch function,然后从响应中的“位置”标题中检索第一个重定向的位置,如下所示:

response = urlfetch.fetch(your_url, follow_redirects=False)
location = response.headers['Location']