class Typhoeus::Request
This class represents a request.
@example (see initialize)
@example Make a request with the shortcut.
response = Typhoeus.get("www.example.com")
@see (see initialize)
Attributes
Returns the provided base url.
@return [ String ]
@return [ Boolean ]
@api private
Returns options, which includes default parameters.
@return [ Hash ]
Returns the original options provided.
@return [ Hash ]
@api private
Public Class Methods
Creates a new request.
@example Simplest request.
response = Typhoeus::Request.new("www.example.com").run
@example Request with url parameters.
response = Typhoeus::Request.new( "www.example.com", params: {a: 1} ).run
@example Request with a body.
response = Typhoeus::Request.new( "www.example.com", body: {b: 2} ).run
@example Request with parameters and body.
response = Typhoeus::Request.new( "www.example.com", params: {a: 1}, body: {b: 2} ).run
@example Create a request and allow follow redirections.
response = Typhoeus::Request.new( "www.example.com", followlocation: true ).run
@param [ String ] #base_url The url to request. @param [ options ] options The options.
@option options [ Hash ] :params Translated
into url parameters.
@option options [ Hash ] :body Translated
into HTTP POST request body.
@return [ Typhoeus::Request ] The request.
@note See {rubydoc.info/github/typhoeus/ethon/Ethon/Easy/Options Ethon::Easy::Options} for more options.
@see Typhoeus::Hydra @see Typhoeus::Response @see Typhoeus::Request::Actions
# File lib/typhoeus/request.rb, line 112 def initialize(base_url, options = {}) @base_url = base_url @original_options = options @options = options.dup set_defaults end
Public Instance Methods
Returns a cache key for use with caching methods that required a string for a key. Will get used by ActiveSupport::Cache stores automatically.
@return [ String ] The cache key.
# File lib/typhoeus/request.rb, line 164 def cache_key "#{self.class.name}#{base_url}#{hashable_string_for(options)}" end
Mimics libcurls POST body generation. This is not accurate, but good enough for VCR.
@return [ String ] The encoded body.
otherwise.
@api private
# File lib/typhoeus/request.rb, line 175 def encoded_body Ethon::Easy::Form.new(nil, options[:body]).to_s end
Returns whether other is equal to self.
@example Are request equal?
request.eql?(other_request)
@param [ Object ] other The object to check.
@return [ Boolean ] Returns true if equal, else false.
@api private
# File lib/typhoeus/request.rb, line 145 def eql?(other) self.class == other.class && self.base_url == other.base_url && fuzzy_hash_eql?(self.options, other.options) end
Overrides Object#hash.
@return [ Integer ] The integer representing the request.
@api private
# File lib/typhoeus/request.rb, line 156 def hash Zlib.crc32 cache_key end
Return the url. In contrast to #base_url which returns the value you specified, url returns the full url including the parameters.
@example Get the url.
request.url
@since 0.5.5
# File lib/typhoeus/request.rb, line 128 def url easy = EasyFactory.new(self).get url = easy.url Typhoeus::Pool.release(easy) url end
Private Instance Methods
Checks if two hashes are equal or not, discarding first-level hash order.
@param [ Hash ] left @param [ Hash ] right hash to check for equality
@return [ Boolean ] Returns true if hashes have
same values for same keys and same length, even if the keys are given in a different order.
# File lib/typhoeus/request.rb, line 190 def fuzzy_hash_eql?(left, right) return true if (left == right) (left.count == right.count) && left.inject(true) do |res, kvp| res && (kvp[1] == right[kvp[0]]) end end
# File lib/typhoeus/request.rb, line 198 def hashable_string_for(obj) case obj when Hash hashable_string_for(obj.sort_by {|sub_obj| sub_obj.first.to_s}) when Array obj.map {|sub_obj| hashable_string_for(sub_obj)}.to_s else obj.to_s end end
Sets default header and verbose when turned on.
# File lib/typhoeus/request.rb, line 210 def set_defaults if @options[:headers] @options[:headers] = {'User-Agent' => Typhoeus::USER_AGENT}.merge(options[:headers]) else @options[:headers] = {'User-Agent' => Typhoeus::USER_AGENT} end @options[:verbose] = Typhoeus::Config.verbose if @options[:verbose].nil? && !Typhoeus::Config.verbose.nil? @options[:maxredirs] ||= 50 end