Sha256: 63e299a09864f8f28320a194ca58bbc52943cebd186bcd83905d123d866826ea

Contents?: true

Size: 1.43 KB

Versions: 14

Compression:

Stored size: 1.43 KB

Contents

module Notu

  module HttpDownload

    def self.get(url, options = {})
      uri = url.is_a?(URI) ? url : URI.parse(url)
      raise Error.new("Invalid URL: #{url.inspect}") unless uri.is_a?(URI::HTTP)
      Notu.logger.debug('Notu') { "GET #{url}" }
      options.reverse_merge!(max_redirects: 10, timeout: 10, max_retries: 3, retry_sleep: 2)
      connection = Net::HTTP.new(uri.host, uri.port)
      connection.open_timeout = options[:timeout]
      connection.read_timeout = options[:timeout]
      if uri.is_a?(URI::HTTPS)
        connection.use_ssl = true
        connection.verify_mode = OpenSSL::SSL::VERIFY_NONE
      end
      connection.start do |http|
        http.request_get(uri.request_uri, (options[:headers] || {}).stringify_keys) do |response|
          begin
            response.value # raise if not success
          rescue Net::HTTPRetriableError
            raise NetworkError.new('Max redirects has been reached') if options[:max_redirects] < 1
            options[:max_redirects] -= 1
            return get(response['Location'], options)
          end
          return response.body
        end
      end
    rescue Net::ReadTimeout, Timeout::Error, Timeout::Error, Zlib::BufError => exception
      raise NetworkError.new(exception) if options[:max_retries] < 1
      options[:max_retries] -= 1
      sleep(options[:retry_sleep])
      get(url, options)
    rescue => exception
      raise NetworkError.new(exception)
    end

  end

end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
notu-2.0.6 lib/notu/http_download.rb
notu-2.0.5 lib/notu/http_download.rb
notu-2.0.4 lib/notu/http_download.rb
notu-2.0.3 lib/notu/http_download.rb
notu-2.0.2 lib/notu/http_download.rb
notu-2.0.1 lib/notu/http_download.rb
notu-2.0.0 lib/notu/http_download.rb
notu-1.0.6 lib/notu/http_download.rb
notu-1.0.5 lib/notu/http_download.rb
notu-1.0.4 lib/notu/http_download.rb
notu-1.0.3 lib/notu/http_download.rb
notu-1.0.2 lib/notu/http_download.rb
notu-1.0.1 lib/notu/http_download.rb
notu-1.0.0 lib/notu/http_download.rb