1 # Rely on autoloading instead of explicit require; helps avoid the "already
2 # initialized constant" warning on Ruby 1.8.7 when NetHttp is refereced below.
3 # require 'faraday/adapter/net_http'
7 # Experimental adapter for net-http-persistent
8 class NetHttpPersistent < NetHttp
9 dependency 'net/http/persistent'
11 def net_http_connection(env)
12 if proxy = env[:request][:proxy]
13 proxy_uri = ::URI::HTTP === proxy[:uri] ? proxy[:uri].dup : ::URI.parse(proxy[:uri].to_s)
14 proxy_uri.user = proxy_uri.password = nil
15 # awful patch for net-http-persistent 2.8 not unescaping user/password
16 (class << proxy_uri; self; end).class_eval do
17 define_method(:user) { proxy[:user] }
18 define_method(:password) { proxy[:password] }
21 Net::HTTP::Persistent.new 'Faraday', proxy_uri
24 def perform_request(http, env)
25 http.request env[:url], create_request(env)
26 rescue Net::HTTP::Persistent::Error => error
27 if error.message.include? 'Timeout'
28 raise Faraday::Error::TimeoutError, error
29 elsif error.message.include? 'connection refused'
30 raise Faraday::Error::ConnectionFailed, error
36 def configure_ssl(http, ssl)
37 http.verify_mode = ssl_verify_mode(ssl)
38 http.cert_store = ssl_cert_store(ssl)
40 http.certificate = ssl[:client_cert] if ssl[:client_cert]
41 http.private_key = ssl[:client_key] if ssl[:client_key]
42 http.ca_file = ssl[:ca_file] if ssl[:ca_file]
43 http.ssl_version = ssl[:version] if ssl[:version]