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

Rex*_*exE 5 python google-app-engine redirect http

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

  1. geturl()返回的URL似乎不包含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,我无法控制或预测.如何确保我的重定向是正确的?

Ale*_*lli 5

使用httplib(并查看响应的返回状态和Location标头)以避免阻碍测试的"自动跟踪重定向".有一个很好的例子在这里.


Nic*_*son 5

提供follow_redirects=Falsefetch函数,然后从响应中的'location'标题中检索第一个重定向的位置,如下所示:

response = urlfetch.fetch(your_url, follow_redirects=False)
location = response.headers['Location']
Run Code Online (Sandbox Code Playgroud)