Class: Faraday::Adapter::NetHttp
Constant Summary
collapse
- NET_HTTP_EXCEPTIONS =
[
EOFError,
Errno::ECONNABORTED,
Errno::ECONNREFUSED,
Errno::ECONNRESET,
Errno::EHOSTUNREACH,
Errno::EINVAL,
Errno::ENETUNREACH,
Net::HTTPBadResponse,
Net::HTTPHeaderSyntaxError,
Net::ProtocolError,
SocketError,
Zlib::GzipFile::Error,
]
CONTENT_LENGTH
Instance Attribute Summary
Attributes included from Parallelism
#supports_parallel
Instance Method Summary
collapse
#save_response
#inherited, #supports_parallel?
#all_loaded_constants, #autoload_all, #load_autoloaded_constants
Methods inherited from Middleware
dependency, inherited, #initialize, loaded?, new
#fetch_middleware, #load_middleware, #lookup_middleware, #middleware_mutex, #register_middleware
Instance Method Details
#call(env) ⇒ Object
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/faraday/adapter/net_http.rb', line 30
def call(env)
super
with_net_http_connection(env) do |http|
configure_ssl(http, env[:ssl]) if env[:url].scheme == 'https' and env[:ssl]
req = env[:request]
http.read_timeout = http.open_timeout = req[:timeout] if req[:timeout]
http.open_timeout = req[:open_timeout] if req[:open_timeout]
begin
http_response = perform_request(http, env)
rescue *NET_HTTP_EXCEPTIONS => err
if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
raise Faraday::SSLError, err
else
raise Error::ConnectionFailed, err
end
end
save_response(env, http_response.code.to_i, http_response.body || '') do ||
http_response. do |key, value|
[key] = value
end
end
end
@app.call env
rescue Timeout::Error, Errno::ETIMEDOUT => err
raise Faraday::Error::TimeoutError, err
end
|
98
99
100
101
102
103
104
105
106
107
108
109
|
# File 'lib/faraday/adapter/net_http.rb', line 98
def configure_ssl(http, ssl)
http.use_ssl = true
http.verify_mode = ssl_verify_mode(ssl)
http.cert_store = ssl_cert_store(ssl)
http.cert = ssl[:client_cert] if ssl[:client_cert]
http.key = ssl[:client_key] if ssl[:client_key]
http.ca_file = ssl[:ca_file] if ssl[:ca_file]
http.ca_path = ssl[:ca_path] if ssl[:ca_path]
http.verify_depth = ssl[:verify_depth] if ssl[:verify_depth]
http.ssl_version = ssl[:version] if ssl[:version]
end
|
#create_request(env) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/faraday/adapter/net_http.rb', line 61
def create_request(env)
request = Net::HTTPGenericRequest.new \
env[:method].to_s.upcase, !!env[:body], :head != env[:method], env[:url].request_uri, env[:request_headers]
if env[:body].respond_to?(:read)
request.body_stream = env[:body]
else
request.body = env[:body]
end
request
end
|
#net_http_connection(env) ⇒ Object
90
91
92
93
94
95
96
|
# File 'lib/faraday/adapter/net_http.rb', line 90
def net_http_connection(env)
if proxy = env[:request][:proxy]
Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:user], proxy[:password])
else
Net::HTTP
end.new(env[:url].host, env[:url].port || (env[:url].scheme == 'https' ? 443 : 80))
end
|
77
78
79
80
81
82
83
84
|
# File 'lib/faraday/adapter/net_http.rb', line 77
def perform_request(http, env)
if :get == env[:method] and !env[:body]
http.get env[:url].request_uri, env[:request_headers]
else
http.request create_request(env)
end
end
|
#ssl_cert_store(ssl) ⇒ Object
111
112
113
114
115
116
117
|
# File 'lib/faraday/adapter/net_http.rb', line 111
def ssl_cert_store(ssl)
return ssl[:cert_store] if ssl[:cert_store]
cert_store = OpenSSL::X509::Store.new
cert_store.set_default_paths
cert_store
end
|
#ssl_verify_mode(ssl) ⇒ Object
119
120
121
122
123
124
125
126
127
|
# File 'lib/faraday/adapter/net_http.rb', line 119
def ssl_verify_mode(ssl)
ssl[:verify_mode] || begin
if ssl.fetch(:verify, true)
OpenSSL::SSL::VERIFY_PEER
else
OpenSSL::SSL::VERIFY_NONE
end
end
end
|
#with_net_http_connection(env) {|net_http_connection(env)| ... } ⇒ Object
86
87
88
|
# File 'lib/faraday/adapter/net_http.rb', line 86
def with_net_http_connection(env)
yield net_http_connection(env)
end
|