如何遵循URL重定向?

时间:2013-10-17 23:57:21

标签: ruby redirect web-scraping

我有一个URL,我需要检索它重定向到的URL(重定向的数量是任意的)。

我正在研究的一个真实例子是:

https://www.google.com/url?q=http://m.zynga.com/about/privacy-center/privacy-policy&sa=D&usg=AFQjCNESJyXBeZenALhKWb52N1vHouAd5Q

最终将重定向到:

http://company.zynga.com/privacy/policy

这是我感兴趣的网址。

我尝试使用open-uri,如下所示:

privacy_url = "https://www.google.com/url?q=http://m.zynga.com/about/privacy-center/privacy-policy&sa=D&usg=AFQjCNESJyXBeZenALhKWb52N1vHouAd5Q"
final_url = nil
open(privacy_url) do |h|
  puts "Redirecting to #{h.base_uri}"
    final_url = h.base_uri
end

但我不断收回原始网址,这意味着final_url等于privacy_url

有没有办法遵循这种重定向并以编程方式访问生成的URL?

1 个答案:

答案 0 :(得分:0)

我终于使用Mechanize gem制作了它。它们的关键是启用follow_meta_refresh选项,默认情况下禁用这些选项。

以下是

require 'mechanize'

browser = Mechanize.new
browser.follow_meta_refresh = true

start_url = "https://www.google.com/url?q=http://m.zynga.com/about/privacy-center/privacy-policy&sa=D&usg=AFQjCNESJyXBeZenALhKWb52N1vHouAd5Q"
final_url = nil
browser.get(start_url) do |page|
    final_url = page.uri.to_s
end
puts final_url # => http://company.zynga.com/privacy/policy