Method: HTMLProofer::UrlValidator::External#response_handler

Defined in:
lib/html_proofer/url_validator/external.rb

#response_handler(response, url, filenames) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/html_proofer/url_validator/external.rb', line 82

def response_handler(response, url, filenames)
  method = response.request.options[:method]
  href = response.request.base_url.to_s
  response_code = response.code
  response.body.delete!("\x00")

  @logger.log(:debug, "Received a #{response_code} for #{href}")

  return if @runner.options[:ignore_status_codes].include?(response_code)

  if response_code.between?(200, 299)
    @cache.add_external(href, filenames, response_code, "OK", true) unless check_hash_in_2xx_response(
      href,
      url,
      response,
      filenames,
    )
  elsif response.timed_out?
    handle_timeout(href, filenames, response_code)
  elsif response_code.zero?
    handle_connection_failure(href, filenames, response_code, response.status_message)
  elsif method == :head # some servers don't support HEAD
    queue_request(:get, url, filenames)
  else
    return if @runner.options[:only_4xx] && !response_code.between?(400, 499)

    # Received a non-successful http response.
    status_message = blank?(response.status_message) ? "" : ": #{response.status_message}"
    msg = "External link #{href} failed#{status_message}"
    add_failure(filenames, msg, response_code)
    @cache.add_external(href, filenames, response_code, msg, false)
  end
end