Как я могу получить окончательный URL после перенаправления с помощью Ruby? - PullRequest
17 голосов
/ 01 февраля 2011

Если http://foo.com перенаправляет на 1.2.3.4, а затем перенаправляет на http://finalurl.com, как я могу использовать Ruby, чтобы узнать целевой URL "http://finalurl.com"?

Ответы [ 5 ]

23 голосов
/ 02 февраля 2011

Вот два способа: 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/
3 голосов
/ 15 сентября 2012

Другой способ, используя Снаряженная :

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 голос
/ 24 марта 2015

для 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
1 голос
/ 11 ноября 2014

Я реализовал RequestResolver для своих нужд:

https://gist.github.com/lulalala/6be104641bcb60f9d0e8

Он использует Net :: HTTP и выполняет несколько перенаправлений.Он также обрабатывает относительные перенаправления.Это было для моей простой необходимости, поэтому могут быть ошибки.Если вы обнаружите, пожалуйста, скажите мне.

0 голосов
/ 01 февраля 2011

Я не большой пользователь Ruby, но в основном вам нужно что-то для интерпретации заголовков HTTP.Похоже, что следующая библиотека делает это:

http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html

Пропустить и перейти к следующему перенаправлению.

...