Sha256: ca5179abf96bbfc20fa053f62fb119c536f60b0eaec7d61d09fcd9676ea5cfec

Contents?: true

Size: 1.44 KB

Versions: 6

Compression:

Stored size: 1.44 KB

Contents

require 'net/http'
require 'net/https'

module Cifrado
  class StreamingDownloader

    def self.get url, output, options = {}
      if output.nil? and !options[:stream]
        raise ArgumentError.new('Invalid output file')
      end
      uri = URI.parse url
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true if uri.scheme == "https"
      copts = options[:connection_options]
      if copts[:ssl_verify_peer] == false
        Log.debug "SSL verification DISABLED"
        http.verify_mode = OpenSSL::SSL::VERIFY_NONE 
      end
      #http.open_timeout = 10 # seconds
      #http.read_timeout = 10 # seconds
      Log.debug "Request URL #{uri.request_uri}"
      request = Net::HTTP::Get.new(uri.request_uri)

      headers = options[:headers]
      request.initialize_http_header headers

      rate_limit = nil
      rate_limit = Cifrado::RateLimit.new(options[:bwlimit]) if options[:bwlimit]

      unless options[:stream]
        file = File.open(output, "wb") 
        Log.debug "Downloading file to #{output}"
      end
      callback = options[:progress_callback]

      http.request(request) do |response|
        clength = response['Content-Length'].to_i
        response.read_body do |segment|
          rate_limit.limit(segment.size) if rate_limit
          callback.call(clength, segment.length, segment) if callback
          file.write(segment) if file
        end
      end
    ensure
      file.close if file
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cifrado-0.2.1 lib/cifrado/streaming_downloader.rb
cifrado-0.2.0 lib/cifrado/streaming_downloader.rb
cifrado-0.1.3 lib/cifrado/streaming_downloader.rb
cifrado-0.1.2 lib/cifrado/streaming_downloader.rb
cifrado-0.1.1 lib/cifrado/streaming_downloader.rb
cifrado-0.1 lib/cifrado/streaming_downloader.rb