class Feedium::Request
Constants
- MAX_CONTENT_SIZE
- URI_REQEX
Attributes
io[R]
uri[R]
url[R]
Public Class Methods
new(url, base_uri = nil)
click to toggle source
# File lib/feedium/request.rb, line 7 def initialize(url, base_uri = nil) url = url.strip url = URI.parse(base_uri).merge(url).to_s if base_uri begin @uri = URI.parse(url) rescue URI::InvalidURIError => e raise Feedium::RequestError.new(e.message) end end
Public Instance Methods
send()
click to toggle source
# File lib/feedium/request.rb, line 18 def send @uri.scheme = 'http' unless %w(http https).include?(@uri.scheme) query = @uri.query.nil? ? '' : "?#{@uri.query}" @url = "#{@uri.scheme}://#{@uri.host}#{@uri.path}#{query}" raise Feedium::RequestError.new('Not valid url') unless @url =~ URI_REQEX begin @io = open(url, { allow_redirections: :all, read_timeout: 10, open_timeout: 10, content_length_proc: ->(size) { raise Feedium::RequestError.new('File Too Large') if size && size > MAX_CONTENT_SIZE }, progress_proc: ->(size) { raise Feedium::RequestError.new('File Too Large') if size > MAX_CONTENT_SIZE }, 'User-Agent' => 'Feedium', 'Accept-Encoding' => '' }) rescue Net::ReadTimeout => e raise Feedium::RequestError.new(e.message == 'Net::ReadTimeout' ? '598 Network Read Timeout Error' : e.message) rescue Net::OpenTimeout => e raise Feedium::RequestError.new(e.message) rescue OpenURI::HTTPError => e raise Feedium::RequestError.new(e.message) rescue OpenSSL::SSL::SSLError => e raise Feedium::RequestError.new(e.message) rescue Errno::ECONNREFUSED => e raise Feedium::RequestError.new(e.message) rescue SocketError=> e raise Feedium::RequestError.new(e.message) rescue Errno::ENETUNREACH => e raise Feedium::RequestError.new(e.message) rescue RuntimeError => e raise Feedium::RequestError.new(e.message) end end