def ping(host = @host)
super(host)
bool = false
uri = URI.parse(host)
start_time = Time.now
begin
response = nil
uri_path = uri.path.empty? ? '/' : uri.path
headers = { }
headers["User-Agent"] = user_agent unless user_agent.nil?
Timeout.timeout(@timeout) do
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == 'https')
request = Net::HTTP::Get.new(uri_path)
response = http.start{ |h| h.request(request) }
end
rescue Exception => err
@exception = err.message
else
if response.is_a?(Net::HTTPSuccess)
bool = true
else
if @follow_redirect
@warning = response.message
rlimit = 0
while response.code.to_i >= 300 && response.code.to_i < 400
if rlimit >= redirect_limit
@exception = "Redirect limit exceeded"
break
end
redirect = URI.parse(response['location'])
redirect = uri + redirect if redirect.relative?
response = Net::HTTP.get_response(redirect.host, redirect.path, @port)
rlimit += 1
end
if response.is_a?(Net::HTTPSuccess)
bool = true
else
@warning = nil
@exception ||= response.message
end
else
@exception = response.message
end
end
end
@duration = Time.now - start_time if bool
bool
end