class HTTPI::Adapter::Libuv
Attributes
client[R]
Public Class Methods
new(request)
click to toggle source
# File lib/httpi/adapter/libuv.rb, line 8 def initialize(request) @request = request @client = ::UV::HttpEndpoint.new request.url end
Public Instance Methods
request(method)
click to toggle source
# File lib/httpi/adapter/libuv.rb, line 15 def request(method) @client.inactivity_timeout = (@request.read_timeout * 1000).to_i if @request.read_timeout && @request.read_timeout > 0 req = { path: @request.url, headers: @request.headers, body: @request.body } if proxy = @request.proxy req[:proxy] = { host: proxy.host, port: proxy.port, username: proxy.user, password: proxy.password } end # Apply authentication settings auth = @request.auth type = auth.type if auth.type creds = auth.credentials case auth.type when :basic req[:headers][:Authorization] = creds when :digest req[:digest] = { user: creds[0], password: creds[1] } when :ntlm req[:ntlm] = { username: creds[0], password: creds[1], domain: creds[2] || '' } end end # Apply Client certificates ssl = auth.ssl if ssl.verify_mode == :peer tls_opts = req[:tls_options] = {} tls_opts[:cert_chain] = ssl.cert.to_pem if ssl.cert tls_opts[:client_ca] = ssl.ca_cert_file if ssl.ca_cert_file tls_opts[:private_key] = ssl.cert_key.to_pem if ssl.cert_key end # Use co-routines to make non-blocking requests response = @client.request(method, req).value ::HTTPI::Response.new(response.status, response, response.body) end