0

我正在 android 环境中开发一个网络浏览器,当我在 google 中执行搜索时,我得到了 google 搜索结果列表。这些结果的 url 是这样的:

http://www.google.ca/url?sa=t&source=web&cd=1&ved=0CDUQFjAA&url=http%3A%2F%2Fwww.test.com%2F&ei=yTOhT7yIGcmu6AG29aSfCQ&usg=AFQjCNH21KLjC0CBkjon2DwD_CZ0HAp

这个 google url 将我发送到真实页面:http ://www.test.com

谷歌使用这种类型的 URL 来跟踪人们点击了哪些链接。但是,对我来说,我需要真正的网址,所以有没有办法从谷歌重定向网址(http://www.google.ca/url?sa=)获取真正的网址(http://www.test.com) t&source=web&cd=1&ved=0CDUQFjAA&url=http%3A%2F%2Fww ...)

我不希望从长字符串中对 url 进行子串化并进行一些替换以获取真实的页面 url,因为这不是一种可靠的方法,因为我将依赖 google url 结构,也许他们会更改其参数名称未来,所以我的方法在这种情况下不起作用......

所以,我想知道是否有办法知道什么网址有重定向链接发送给我

提前致谢。

4

2 回答 2

2

如果你仔细看,Google 会返回类似http://www.google.ca/url?xxx=...&yyy=...&url=real_url&zzz= ... 的内容,即真正的 URL 在urlGET 参数中谷歌返回的网址。您需要做的就是解析 google 返回的 URL - 真正的 URL 将在url响应的 GET 参数中。不要忘记做url_decode它。

另一种方法是获取 google 返回的完整 URL 并在其上执行 HTTP GET。您应该会收到 301 或 302 重定向。从该响应中,读取location标头的值 - 这将是您的真实 URL。

于 2012-05-02T15:09:27.813 回答
0

请记住,谷歌可以更改它提供的链接,只需在搜索结果中使用网站的“真实”网址。

涵盖可预见的未来的稳健方法是:

  1. 检查链接的是否包含谷歌,如果没有,它可能是“真实”的 URL
  2. 如果域包含谷歌。*,尝试从 GET 参数中获取 URL 并取消转义值,然后检查它是否是有效的 URL。
  3. 如果一切都失败了,那么一定要调用链接并检查location标题。

如果您能够在出现任何故障时进行记录,您可以检查出现了什么问题以及原因。

于 2012-05-16T12:11:57.183 回答