如何获取最终重定向的URL

1 投票
3 回答
1803 浏览
提问于 2025-04-16 01:41

我正在使用谷歌应用引擎来获取一些网址,但有几个网址是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操作才能解决这个问题。

撰写回答