2011-02-01 100 views
17

如果http://foo.com重定向到1.2.3.4然後重定向到http://finalurl.com,我該如何使用Ruby來查找着陸URL「http://finalurl.com」?如何在使用Ruby重定向後獲取最終的URL?

+0

請出示一些示例代碼,以便我們可以告訴您所使用的HTTP客戶端。 – 2011-02-01 20:48:26

+0

我使用了[final_redirect_url](https://rubygems.org/gems/final_redirect_url)gem來獲取最終重定向的url。它只是以字符串形式返回最終的URL。 – Indyarocks 2017-05-03 05:20:45

回答

22

這裏有兩種方式,同時使用HTTPClientOpen-URI

require 'httpclient' 
require 'open-uri' 

URL = 'http://www.example.org' 

httpc = HTTPClient.new 
resp = httpc.get(URL) 
puts resp.header['Location'] 
>> http://www.iana.org/domains/example/ 

open(URL) do |resp| 
    puts resp.base_uri.to_s 
end 
>> http://www.iana.org/domains/example/ 
+1

最好使用httpc.head(URL)而不是httpc.get(URL)。這可以防止整個站點加載。 – cavneb 2013-01-23 19:06:01

3

的另一種方法,使用Curb

def get_redirected_url(your_url) 
    result = Curl::Easy.perform(your_url) do |curl| 
    curl.follow_location = true 
    end 
    result.last_effective_url 
end 
1

JRuby這個工作

def get_final_url (url) 
    final_url = "" 
    until url.nil? do 
     final_url = url 
     url = Net::HTTP.get_response(URI.parse(url))['location'] 
    end 

    final_url 
    end 
相關問題