Если http://foo.com перенаправляет на 1.2.3.4, а затем перенаправляет на http://finalurl.com, как я могу использовать Ruby, чтобы узнать целевой URL "http://finalurl.com"?
http://foo.com
1.2.3.4
http://finalurl.com
Вот два способа: HTTPClient и Open-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/
Другой способ, используя Снаряженная :
def get_redirected_url(your_url) result = Curl::Easy.perform(your_url) do |curl| curl.follow_location = true end result.last_effective_url end
для JRuby это сработало
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
Я реализовал RequestResolver для своих нужд:
https://gist.github.com/lulalala/6be104641bcb60f9d0e8
Он использует Net :: HTTP и выполняет несколько перенаправлений.Он также обрабатывает относительные перенаправления.Это было для моей простой необходимости, поэтому могут быть ошибки.Если вы обнаружите, пожалуйста, скажите мне.
Я не большой пользователь Ruby, но в основном вам нужно что-то для интерпретации заголовков HTTP.Похоже, что следующая библиотека делает это:
http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html
Пропустить и перейти к следующему перенаправлению.