Вы можете проверить код состояния ответа и рекурсивно получить окончательный URL-адрес, используя метод get_final_redirect_url
:
require 'net/http'
def get_final_redirect_url(url, limit = 10)
uri = URI.parse(url)
response = ::Net::HTTP.get_response(uri)
if response.class == Net::HTTPOK
return uri
else
redirect_location = response['location']
location_uri = URI.parse(redirect_location)
if location_uri.host.nil?
redirect_location = uri.scheme + '://' + uri.host + redirect_location
end
warn "redirected to #{redirect_location}"
get_final_redirect_url(redirect_location, limit - 1)
end
end
Я столкнулся с той же проблемой. Я решил это и построил вокруг него гем final_redirect_url , чтобы каждый мог получить от него пользу.
Подробную информацию об использовании можно найти здесь .