self.check_external

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