48 lines
1.7 KiB
Ruby
48 lines
1.7 KiB
Ruby
|
# Rely on autoloading instead of explicit require; helps avoid the "already
|
||
|
# initialized constant" warning on Ruby 1.8.7 when NetHttp is refereced below.
|
||
|
# require 'faraday/adapter/net_http'
|
||
|
|
||
|
module Faraday
|
||
|
class Adapter
|
||
|
# Experimental adapter for net-http-persistent
|
||
|
class NetHttpPersistent < NetHttp
|
||
|
dependency 'net/http/persistent'
|
||
|
|
||
|
def net_http_connection(env)
|
||
|
if proxy = env[:request][:proxy]
|
||
|
proxy_uri = ::URI::HTTP === proxy[:uri] ? proxy[:uri].dup : ::URI.parse(proxy[:uri].to_s)
|
||
|
proxy_uri.user = proxy_uri.password = nil
|
||
|
# awful patch for net-http-persistent 2.8 not unescaping user/password
|
||
|
(class << proxy_uri; self; end).class_eval do
|
||
|
define_method(:user) { proxy[:user] }
|
||
|
define_method(:password) { proxy[:password] }
|
||
|
end if proxy[:user]
|
||
|
end
|
||
|
Net::HTTP::Persistent.new 'Faraday', proxy_uri
|
||
|
end
|
||
|
|
||
|
def perform_request(http, env)
|
||
|
http.request env[:url], create_request(env)
|
||
|
rescue Net::HTTP::Persistent::Error => error
|
||
|
if error.message.include? 'Timeout'
|
||
|
raise Faraday::Error::TimeoutError, error
|
||
|
elsif error.message.include? 'connection refused'
|
||
|
raise Faraday::Error::ConnectionFailed, error
|
||
|
else
|
||
|
raise
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def configure_ssl(http, ssl)
|
||
|
http.verify_mode = ssl_verify_mode(ssl)
|
||
|
http.cert_store = ssl_cert_store(ssl)
|
||
|
|
||
|
http.certificate = ssl[:client_cert] if ssl[:client_cert]
|
||
|
http.private_key = ssl[:client_key] if ssl[:client_key]
|
||
|
http.ca_file = ssl[:ca_file] if ssl[:ca_file]
|
||
|
http.ssl_version = ssl[:version] if ssl[:version]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|