in _plugins/link-checker.rb [247:303]
def self.check_external(url)
uri = URI(url)
return true if @ignored_domains.include? uri.host
begin
Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
request = Net::HTTP::Get.new(uri)
http.request(request) do |response|
return true if @success_codes.include? response.code
if @@retry_codes.include? response.code
retry_after = response.header['retry-after']
if retry_after.nil?
Jekyll.logger.warn "LinkChecker: [Warning] Got #{response.code} from #{url}, cannot retry due to missing retry header"
return true
end
if @retry_external_links
now = Process.clock_gettime(Process::CLOCK_MONOTONIC)
retry_timestamp = retry_after.to_i + now
@retry_timeouts_dict[uri.host] = {
:code => response.code,
:retry_timestamp => retry_timestamp
}
Jekyll.logger.warn "LinkChecker: [Warning] Got #{response.code} from #{url}, will retry after #{retry_after}s"
return true, { retry_host_name: uri.host }
end
Jekyll.logger.warn "LinkChecker: [Warning] Got #{response.code} from #{url}, will not retry"
return true
elsif @@questionable_codes.include? response.code
Jekyll.logger.warn "LinkChecker: [Warning] Got #{response.code} from #{url}"
return true
end
Jekyll.logger.error "LinkChecker: [Error] Got #{response.code} from #{url}"
return false
end
end
rescue OpenSSL::SSL::SSLError, Net::OpenTimeout, Errno::ETIMEDOUT, Errno::ECONNREFUSED => exception
Jekyll.logger.error "LinkChecker: [Error] Exception Occurred for URL #{url} #{exception.class}. Message: #{exception.message}."
return false
rescue => exception
Jekyll.logger.error "LinkChecker: [Error] Unknown Error::URL: #{url}\nError: #{exception.class}. Message: #{exception.message}."
return false
end
end