Class: Faraday::Adapter::NetHttp
Constant Summary
collapse
- NET_HTTP_EXCEPTIONS =
[
IOError,
Errno::ECONNABORTED,
Errno::ECONNREFUSED,
Errno::ECONNRESET,
Errno::EHOSTUNREACH,
Errno::EINVAL,
Errno::ENETUNREACH,
Errno::EPIPE,
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
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
60
|
# File 'lib/faraday/adapter/net_http.rb', line 31
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 || '', nil, http_response.message) 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
|
99
100
101
102
103
104
105
106
107
108
109
110
|
# File 'lib/faraday/adapter/net_http.rb', line 99
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/faraday/adapter/net_http.rb', line 62
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
91
92
93
94
95
96
97
|
# File 'lib/faraday/adapter/net_http.rb', line 91
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
|
78
79
80
81
82
83
84
85
|
# File 'lib/faraday/adapter/net_http.rb', line 78
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
112
113
114
115
116
117
118
|
# File 'lib/faraday/adapter/net_http.rb', line 112
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
120
121
122
123
124
125
126
127
128
|
# File 'lib/faraday/adapter/net_http.rb', line 120
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
87
88
89
|
# File 'lib/faraday/adapter/net_http.rb', line 87
def with_net_http_connection(env)
yield net_http_connection(env)
end
|