Если http://foo.com
перенаправляется на 1.2.3.4
, который затем перенаправляется на http://finalurl.com
, как я могу использовать Ruby для определения URL-адреса приземления "http://finalurl.com"?
Как получить окончательный URL-адрес после перенаправления с помощью Ruby?
Ответ 1
Здесь два способа, используя 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/
Ответ 2
Другой способ: 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
Ответ 3
Я выполнил RequestResolver для моей потребности:
https://gist.github.com/lulalala/6be104641bcb60f9d0e8
Он использует Net:: HTTP и выполняет несколько переадресаций. Он также обрабатывает относительные перенаправления. Это было для моей простой необходимости, поэтому могут быть ошибки. Если вы откроете его, скажите мне.
Ответ 4
для 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
Ответ 5
Я не очень люблю пользователя Ruby, но то, что вам в основном нужно, это интерпретация заголовков HTTP. Кажется, что следующая библиотека:
http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html
Перейдите к следующему перенаправлению.