class HTTPI::Adapter::HTTP
HTTPI::Adapter::HTTP
¶ ↑
Adapter
for the http.rb client. github.com/httprb/http.rb
Attributes
client[R]
Public Class Methods
new(request)
click to toggle source
# File lib/httpi/adapter/http.rb, line 15 def initialize(request) if request.auth.digest? raise NotSupportedError, "http.rb does not support HTTP digest authentication" end if request.auth.ntlm? raise NotSupportedError, "http.rb does not support NTLM digest authentication" end @request = request @client = create_client end
Public Instance Methods
request(method)
click to toggle source
Executes arbitrary HTTP
requests. @see HTTPI.request
# File lib/httpi/adapter/http.rb, line 31 def request(method) unless ::HTTP::Request::METHODS.include? method raise NotSupportedError, "http.rb does not support custom HTTP methods" end response = begin @client.send(method, @request.url, :body => @request.body) rescue OpenSSL::SSL::SSLError raise SSLError end Response.new(response.code, response.headers.to_h, response.body.to_s) end
Private Instance Methods
create_client()
click to toggle source
# File lib/httpi/adapter/http.rb, line 46 def create_client if @request.ssl? context = OpenSSL::SSL::SSLContext.new context.options = OpenSSL::SSL::SSLContext::DEFAULT_PARAMS[:options] if @request.auth.ssl.ca_cert_file != nil context.ca_file = @request.auth.ssl.ca_cert_file else context.cert_store = OpenSSL::SSL::SSLContext::DEFAULT_CERT_STORE end context.cert = @request.auth.ssl.cert context.key = @request.auth.ssl.cert_key context.ssl_version = @request.auth.ssl.ssl_version if @request.auth.ssl.ssl_version != nil context.min_version = @request.auth.ssl.min_version if @request.auth.ssl.min_version != nil context.max_version = @request.auth.ssl.max_version if @request.auth.ssl.max_version != nil context.verify_mode = @request.auth.ssl.openssl_verify_mode context.ciphers = @request.auth.ssl.ciphers if @request.auth.ssl.ciphers client = ::HTTP::Client.new(:ssl_context => context) else client = ::HTTP end if @request.auth.basic? client = client.basic_auth(:user => @request.auth.credentials[0], :pass => @request.auth.credentials[1]) end if @request.proxy != nil client = client.via(@request.proxy.host, @request.proxy.port, @request.proxy.user, @request.proxy.password) end timeouts = {} timeouts[:connect] = @request.open_timeout if @request.open_timeout timeouts[:read] = @request.read_timeout if @request.read_timeout timeouts[:write] = @request.write_timeout if @request.write_timeout client = client.timeout(timeouts) if timeouts.any? client.headers(@request.headers) end