class Google::Apis::Core::HttpClientAdapter
HTTPClient adapter for Hurley.
Public Instance Methods
call(request)
click to toggle source
# File lib/google/apis/core/http_client_adapter.rb, line 11 def call(request) client = ::HTTPClient.new configure_client(client, request) begin ::Hurley::Response.new(request) do |res| http_res = client.request(request.verb.to_s.upcase, request.url.to_s, nil, request.body_io, request.header.to_hash, false) do |http_res, chunk| copy_response(http_res, res) res.receive_body(chunk) end copy_response(http_res, res) end rescue ::HTTPClient::TimeoutError, Errno::ETIMEDOUT raise ::Hurley::Timeout, $! rescue ::HTTPClient::BadResponseError => err if err.message.include?('status 407') raise ::Hurley::ConnectionFailed, %Q{407 "Proxy Authentication Required "} else raise Hurley::ClientError, $! end rescue Errno::ECONNREFUSED, EOFError raise ::Hurley::ConnectionFailed, $! rescue => err if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err raise Hurley::SSLError, err else raise end end end
configure_client(client, request)
click to toggle source
# File lib/google/apis/core/http_client_adapter.rb, line 51 def configure_client(client, request) client.transparent_gzip_decompression = true if request.options.proxy proxy = request.options.proxy client.proxy = sprintf('%s:%d', proxy.host, proxy.port) if proxy.user && proxy.password client.set_proxy_auth proxy.user, proxy.password end end if request.options.timeout client.connect_timeout = request.options.timeout client.receive_timeout = request.options.timeout client.send_timeout = request.options.timeout end if request.options.open_timeout client.connect_timeout = request.options.open_timeout client.send_timeout = request.options.open_timeout end ssl_config = client.ssl_config ssl_opts = request.ssl_options ssl_config.verify_mode = ssl_opts.openssl_verify_mode ssl_config.cert_store = ssl_opts.openssl_cert_store ssl_config.add_trust_ca ssl_opts.ca_file if ssl_opts.ca_file ssl_config.add_trust_ca ssl_opts.ca_path if ssl_opts.ca_path ssl_config.client_cert = ssl_opts.openssl_client_cert if ssl_opts.openssl_client_cert ssl_config.client_key = ssl_opts.openssl_client_key if ssl_opts.openssl_client_key ssl_config.verify_depth = ssl_opts.verify_depth if ssl_opts.verify_depth end
copy_response(http_res, res)
click to toggle source
# File lib/google/apis/core/http_client_adapter.rb, line 42 def copy_response(http_res, res) unless res.status_code res.status_code = http_res.status.to_i http_res.header.all.each do |(k,v)| res.header[k] = v end end end