class WebStat::FinalRedirectUrl
Public Class Methods
final_redirect_url(url, options={})
click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 7 def final_redirect_url(url, options={}) final_url = '' if is_valid_url?(url) begin redirect_lookup_depth = options[:depth].to_i > 0 ? options[:depth].to_i : 10 response_uri = get_final_redirect_url(url, redirect_lookup_depth) final_url = url_string_from_uri(response_uri) rescue => e # nothing end end final_url end
Private Class Methods
get_final_redirect_url(url, limit = 10)
click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 25 def get_final_redirect_url(url, limit = 10) return url if limit <= 0 uri = URI.parse(url) response = ::Net::HTTP.get_response(uri) if response.class == Net::HTTPOK if WebStat::Configure.get["use_chromedirver"] return URI.parse(WebStat::WebDriverHelper.get_last_url(uri)) else return URI.parse(uri) end 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
is_valid_url?(url)
click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 22 def is_valid_url?(url) url.to_s.match? URI::regexp(['http', 'https']) end
url_string_from_uri(uri)
click to toggle source
# File lib/web_stat/final_redirect_url.rb, line 45 def url_string_from_uri(uri) url_str = "#{uri.scheme}://#{uri.host}#{uri.request_uri}" if uri.fragment url_str = url_str + "##{uri.fragment}" end url_str end