class HTTPI::Adapter::HTTPClient

HTTPI::Adapter::HTTPClient

Adapter for the HTTPClient client. rubygems.org/gems/httpclient

Attributes

client[R]

Public Class Methods

new(request) click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 15
def initialize(request)
  @request = request
  @client = ::HTTPClient.new
end

Public Instance Methods

request(method) click to toggle source

Executes arbitrary HTTP requests. @see HTTPI.request

# File lib/httpi/adapter/httpclient.rb, line 24
def request(method)
  setup_client
  respond_with @client.request(method, @request.url, nil, @request.body, @request.headers, &@request.on_body)
rescue OpenSSL::SSL::SSLError
  raise SSLError
rescue Errno::ECONNREFUSED   # connection refused
  $!.extend ConnectionError
  raise
end

Private Instance Methods

basic_setup() click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 44
def basic_setup
  @client.proxy = @request.proxy if @request.proxy
  @client.connect_timeout = @request.open_timeout if @request.open_timeout
  @client.receive_timeout = @request.read_timeout if @request.read_timeout
  @client.send_timeout = @request.write_timeout if @request.write_timeout
end
respond_with(response) click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 87
def respond_with(response)
  headers = {}
  response.header.all.each do |(header, value)|
    if headers.key?(header)
      headers[header] = Array(headers[header]) << value
    else
      headers[header] = value
    end
  end
  Response.new response.code, headers, response.content
end
setup_auth() click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 51
def setup_auth
  @client.set_auth @request.url, *@request.auth.credentials
end
setup_client() click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 36
def setup_client
  basic_setup

  setup_auth if @request.auth.http?
  setup_ntlm_auth if @request.auth.ntlm?
  setup_ssl_auth if @request.auth.ssl? || @request.ssl?
end
setup_ntlm_auth() click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 55
def setup_ntlm_auth
  username, password, domain = @request.auth.credentials

  unless domain.nil?
    username = "#{domain.upcase}\\#{username}"
  end

  @client.set_auth @request.url, username, password
end
setup_ssl_auth() click to toggle source
# File lib/httpi/adapter/httpclient.rb, line 65
def setup_ssl_auth
  ssl = @request.auth.ssl

  if @request.auth.ssl?
    if ssl.ca_cert_file && ssl.verify_mode != :none
      @client.ssl_config.add_trust_ca(ssl.ca_cert_file)
    end

    # Send client-side certificate regardless of state of SSL verify mode
    @client.ssl_config.client_cert = ssl.cert
    @client.ssl_config.client_key = ssl.cert_key
    @client.ssl_config.ciphers = ssl.ciphers if ssl.ciphers

    @client.ssl_config.verify_mode = ssl.openssl_verify_mode
  end

  @client.ssl_config.ssl_version = ssl.ssl_version.to_s if ssl.ssl_version
  if ssl.min_version || ssl.max_version
    raise NotSupportedError, 'Httpclient adapter does not support #min_version or #max_version. Please, use #ssl_version instead'
  end
end