module Requests

Constants

CA_FILE

Public Class Methods

request(method, url, headers: {}, data: nil, params: nil, auth: nil, proxy: nil, options: {}) click to toggle source
# File lib/requests.rb, line 20
def self.request(method, url,
  headers: {},
  data: nil,
  params: nil,
  auth: nil,
  proxy: nil,
  options: {})

  uri = URI.parse(url)
  uri.query = encode_www_form(params) if params

  body = process_params(headers: headers, data: data) if data

  basic_auth(headers, *auth) if auth

  proxy = proxy.to_h.values_at(:host, :port, :user, :password)
  response = Net::HTTP.start(uri.host, uri.port, *proxy, opts(uri, options)) do |http|
    http.send_request(method, uri, body, headers)
  end

  if response.is_a?(Net::HTTPSuccess)
    Response.new(response.code, response.to_hash, response.body)
  else
    raise Error, response
  end
end

Private Class Methods

basic_auth(headers, user, pass) click to toggle source
# File lib/requests.rb, line 63
def self.basic_auth(headers, user, pass)
  headers['Authorization'] = 'Basic ' + ["#{user}:#{pass}"].pack('m0')
end
encode_www_form(params) click to toggle source
# File lib/requests.rb, line 48
def self.encode_www_form(params)
  URI.encode_www_form(params)
end
opts(uri, options) click to toggle source
# File lib/requests.rb, line 52
def self.opts(uri, options)
  if uri.scheme == 'https'
    { use_ssl: true,
      verify_mode: OpenSSL::SSL::VERIFY_PEER,
      ca_file: CA_FILE,
      read_timeout: options[:read_timeout],
      open_timeout: options[:open_timeout],
    }
  end
end
process_params(headers: nil, data: nil) click to toggle source
# File lib/requests.rb, line 67
def self.process_params(headers: nil, data: nil)
  if not data.kind_of?(Enumerable)
    data
  else
    headers['content-type'] = 'application/x-www-form-urlencoded'

    encode_www_form(data)
  end
end