如何获取最终重定向的URL
我正在使用谷歌应用引擎来获取一些网址,但有几个网址是301重定向的。我想要获取最终的网址,以便能得到结果。
我正在使用通用订阅源阅读器来解析这些网址,请问有没有什么方法或者函数可以让我得到最终的网址呢?
3 个回答
0
你可以通过手动处理重定向来实现这个功能。当你使用fetch时,传入 follow_redirects=False
。如果你得到的响应对象的HTTP状态是重定向代码,比如301或302,就获取 Location
这个响应头,然后再次请求,直到HTTP状态变成其他的。为了避免无限重定向,建议加一个检查,比如最多允许5次重定向。
3
如果你在使用 urlfetch API,你可以直接查看从 urlfetch.fetch()
得到的 响应对象 的 final_url
属性,前提是你把 follow_redirects
设置为 True
:
>>> from google.appengine.api import urlfetch
>>> url_that_redirects = 'http://www.example.com/redirect/'
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=False)
>>> resp.status_code
302 # or 301 or whatever
>>> resp = urlfetch.fetch(url=url_that_redirects, follow_redirects=True)
>>> resp.status_code
200
>>> resp.final_url
'http://www.example.com/final_url/'
需要注意的是,follow_redirects
这个参数默认就是 True
,所以你其实不需要特别去设置它。
3
要想得到最终的链接,光靠分析是不行的。你至少需要进行一次HTTP的HEAD操作才能解决这个问题。