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

2024-05-15 10:46:17 发布

您现在位置:Python中文网/ 问答频道 /正文

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

  1. geturl()返回的URL似乎不包括像?k1=v1&k2=v2这样的URL查询字符串;我如何才能看到这些字符串?(我需要检查是否正确地将访问者的原始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,我无法控制或预测。如何确保重定向正确?

Tags: 字符串comhttpurl客户端foo站点example
2条回答

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

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

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

相关问题 更多 >