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

5 投票
2 回答
6548 浏览
提问于 2025-04-15 19:50

我正在为我的Google App Engine网站编写客户端的Python单元测试,以验证HTTP 302重定向是否指向正确的页面。目前,我一直在使用urllib2.urlopen(my_url).geturl()来获取重定向的URL。不过,我遇到了两个问题:

  1. 通过geturl()返回的URL似乎不包含像?k1=v1&k2=v2这样的查询字符串;我该如何查看这些查询字符串呢?(我需要检查是否正确地将访客原始的URL查询字符串传递给重定向页面。)
  2. geturl()显示的是经过任何额外重定向后的最终URL。我只关心第一次重定向(也就是从我的网站发出的那一次);后面的我不太在意。例如,假设我的网站是example.com。如果用户请求http://www.example.com/somepath/?q=foo,我可能想把他们重定向到http://www.anothersite.com?q=foo。那个其他网站可能会再进行一次重定向,指向http://subdomain.anothersite.com?q=foo,而这个我无法控制或预测。我该如何确保我的重定向是正确的呢?

2 个回答

5

使用 httplib (并查看响应的返回状态和位置头部)来避免“自动跟随重定向”,这样可以帮助你更好地进行测试。这里有一个不错的例子 在这里

5

在调用 fetch 函数 时,给它传入 follow_redirects=False 这个参数,这样就可以停止自动跟随重定向。然后,你可以从响应中的 'location' 头部获取第一个重定向的地址,像这样:

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

撰写回答