faraday-net_http 1.0.1 → 3.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +8 -8
- data/lib/faraday/adapter/net_http.rb +58 -65
- data/lib/faraday/net_http/version.rb +1 -1
- data/lib/faraday/net_http.rb +2 -2
- metadata +12 -140
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b449661096fbc74a1cdd3bc33377a7ca128666451d1ce6b17c7d5007f351c3b
|
4
|
+
data.tar.gz: 4b7cb1e14d209c97a7e54df7349b9eea265506ef5bf5ecf5344b4077acfb6929
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f2325b3ce4bd6483566c8c2b70c1ad8e5a95d28c4b090dacdb0a17f5be34a89c5f1b8adae5f39faea5a6777483af7d95a41230e04614d7e27ef392b64a962cb
|
7
|
+
data.tar.gz: f82744eda714b6da33e0231718c3f4f83156d78369fc17fd6a73020ddbbccec4b79db0a2fdf25e15416ea5f8e442ff267ef97e3725e8cdcce5b2a13f283c5bcd
|
data/README.md
CHANGED
@@ -20,16 +20,17 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
Configure your Faraday connection to use this adapter like this:
|
24
|
-
|
25
23
|
```ruby
|
26
|
-
|
27
|
-
|
24
|
+
conn = Faraday.new(...) do |f|
|
25
|
+
f.adapter :net_http do |http|
|
26
|
+
# yields Net::HTTP
|
27
|
+
http.verify_callback = lambda do |preverify, cert_store|
|
28
|
+
# do something here...
|
29
|
+
end
|
30
|
+
end
|
28
31
|
end
|
29
32
|
```
|
30
33
|
|
31
|
-
For more information on how to setup your Faraday connection and adapters usage, please refer to the [Faraday Website][faraday-website].
|
32
|
-
|
33
34
|
## Development
|
34
35
|
|
35
36
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -49,9 +50,8 @@ The gem is available as open source under the terms of the [license][license].
|
|
49
50
|
Everyone interacting in the Faraday Net::HTTP adapter project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct][code-of-conduct].
|
50
51
|
|
51
52
|
[faraday]: https://github.com/lostisland/faraday
|
52
|
-
[faraday-website]: https://lostisland.github.io/faraday
|
53
53
|
[net-http]: https://ruby-doc.org/stdlib-2.7.0/libdoc/net/http/rdoc/Net/HTTP.html
|
54
54
|
[rubygems]: https://rubygems.org
|
55
55
|
[repo]: https://github.com/lostisland/faraday-net_http
|
56
56
|
[license]: https://github.com/lostisland/faraday-net_http/blob/main/LICENSE.md
|
57
|
-
[code-of-conduct]: https://github.com/lostisland/faraday-net_http/blob/main/CODE_OF_CONDUCT.md
|
57
|
+
[code-of-conduct]: https://github.com/lostisland/faraday-net_http/blob/main/CODE_OF_CONDUCT.md
|
@@ -15,6 +15,7 @@ module Faraday
|
|
15
15
|
exceptions = [
|
16
16
|
IOError,
|
17
17
|
Errno::EADDRNOTAVAIL,
|
18
|
+
Errno::EALREADY,
|
18
19
|
Errno::ECONNABORTED,
|
19
20
|
Errno::ECONNREFUSED,
|
20
21
|
Errno::ECONNRESET,
|
@@ -41,8 +42,7 @@ module Faraday
|
|
41
42
|
|
42
43
|
def build_connection(env)
|
43
44
|
net_http_connection(env).tap do |http|
|
44
|
-
http
|
45
|
-
configure_ssl(http, env[:ssl])
|
45
|
+
configure_ssl(http, env[:ssl]) if env[:url].scheme == 'https' && env[:ssl]
|
46
46
|
configure_request(http, env[:request])
|
47
47
|
end
|
48
48
|
end
|
@@ -53,7 +53,8 @@ module Faraday
|
|
53
53
|
if proxy
|
54
54
|
Net::HTTP.new(env[:url].hostname, port,
|
55
55
|
proxy[:uri].hostname, proxy[:uri].port,
|
56
|
-
proxy[:user], proxy[:password]
|
56
|
+
proxy[:user], proxy[:password],
|
57
|
+
nil, proxy[:uri].scheme == 'https')
|
57
58
|
else
|
58
59
|
Net::HTTP.new(env[:url].hostname, port, nil)
|
59
60
|
end
|
@@ -61,24 +62,13 @@ module Faraday
|
|
61
62
|
|
62
63
|
def call(env)
|
63
64
|
super
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
raise Faraday::SSLError, e if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
|
65
|
+
connection(env) do |http|
|
66
|
+
perform_request(http, env)
|
67
|
+
rescue *NET_HTTP_EXCEPTIONS => e
|
68
|
+
raise Faraday::SSLError, e if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
|
69
69
|
|
70
|
-
|
71
|
-
end
|
70
|
+
raise Faraday::ConnectionFailed, e
|
72
71
|
end
|
73
|
-
|
74
|
-
save_response(env, http_response.code.to_i,
|
75
|
-
http_response.body || +'', nil,
|
76
|
-
http_response.message) do |response_headers|
|
77
|
-
http_response.each_header do |key, value|
|
78
|
-
response_headers[key] = value
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
72
|
@app.call env
|
83
73
|
rescue Timeout::Error, Errno::ETIMEDOUT => e
|
84
74
|
raise Faraday::TimeoutError, e
|
@@ -103,64 +93,51 @@ module Faraday
|
|
103
93
|
end
|
104
94
|
|
105
95
|
def perform_request(http, env)
|
106
|
-
if env
|
107
|
-
|
108
|
-
|
109
|
-
http_response = request_with_wrapped_block(http, env) do |chunk|
|
110
|
-
if chunk.bytesize.positive? || size.positive?
|
111
|
-
yielded = true
|
112
|
-
size += chunk.bytesize
|
113
|
-
env[:request].on_data.call(chunk, size)
|
114
|
-
end
|
96
|
+
if env.stream_response?
|
97
|
+
http_response = env.stream_response do |&on_data|
|
98
|
+
request_with_wrapped_block(http, env, &on_data)
|
115
99
|
end
|
116
|
-
env[:request].on_data.call(+'', 0) unless yielded
|
117
|
-
# Net::HTTP returns something,
|
118
|
-
# but it's not meaningful according to the docs.
|
119
100
|
http_response.body = nil
|
120
|
-
http_response
|
121
101
|
else
|
122
|
-
request_with_wrapped_block(http, env)
|
102
|
+
http_response = request_with_wrapped_block(http, env)
|
123
103
|
end
|
104
|
+
env.response_body = encoded_body(http_response)
|
105
|
+
env.response.finish(env)
|
106
|
+
http_response
|
124
107
|
end
|
125
108
|
|
126
109
|
def request_with_wrapped_block(http, env, &block)
|
127
|
-
if (env[:method] == :get) && !env[:body]
|
128
|
-
# prefer `get` to `request` because the former handles gzip (ruby 1.9)
|
129
|
-
request_via_get_method(http, env, &block)
|
130
|
-
else
|
131
|
-
request_via_request_method(http, env, &block)
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
def request_via_get_method(http, env, &block)
|
136
110
|
# Must use Net::HTTP#start and pass it a block otherwise the server's
|
137
111
|
# TCP socket does not close correctly.
|
138
112
|
http.start do |opened_http|
|
139
|
-
opened_http.
|
113
|
+
opened_http.request create_request(env) do |response|
|
114
|
+
save_http_response(env, response)
|
115
|
+
|
116
|
+
response.read_body(&block) if block_given?
|
117
|
+
end
|
140
118
|
end
|
141
119
|
end
|
142
120
|
|
143
|
-
def
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
response.read_body(&block)
|
150
|
-
end
|
151
|
-
else
|
152
|
-
opened_http.request create_request(env)
|
121
|
+
def save_http_response(env, http_response)
|
122
|
+
save_response(
|
123
|
+
env, http_response.code.to_i, nil, nil, http_response.message, finished: false
|
124
|
+
) do |response_headers|
|
125
|
+
http_response.each_header do |key, value|
|
126
|
+
response_headers[key] = value
|
153
127
|
end
|
154
128
|
end
|
155
129
|
end
|
156
130
|
|
157
131
|
def configure_ssl(http, ssl)
|
158
|
-
|
132
|
+
http.use_ssl = true if http.respond_to?(:use_ssl=)
|
159
133
|
|
160
134
|
http.verify_mode = ssl_verify_mode(ssl)
|
161
135
|
http.cert_store = ssl_cert_store(ssl)
|
162
136
|
|
163
|
-
|
137
|
+
cert, *extra_chain_cert = ssl[:client_cert]
|
138
|
+
http.cert = cert if cert
|
139
|
+
http.extra_chain_cert = extra_chain_cert if extra_chain_cert.any?
|
140
|
+
|
164
141
|
http.key = ssl[:client_key] if ssl[:client_key]
|
165
142
|
http.ca_file = ssl[:ca_file] if ssl[:ca_file]
|
166
143
|
http.ca_path = ssl[:ca_path] if ssl[:ca_path]
|
@@ -168,6 +145,8 @@ module Faraday
|
|
168
145
|
http.ssl_version = ssl[:version] if ssl[:version]
|
169
146
|
http.min_version = ssl[:min_version] if ssl[:min_version]
|
170
147
|
http.max_version = ssl[:max_version] if ssl[:max_version]
|
148
|
+
http.verify_hostname = ssl[:verify_hostname] if verify_hostname_enabled?(http, ssl)
|
149
|
+
http.ciphers = ssl[:ciphers] if ssl[:ciphers]
|
171
150
|
end
|
172
151
|
|
173
152
|
def configure_request(http, req)
|
@@ -193,20 +172,34 @@ module Faraday
|
|
193
172
|
def ssl_cert_store(ssl)
|
194
173
|
return ssl[:cert_store] if ssl[:cert_store]
|
195
174
|
|
196
|
-
|
197
|
-
|
198
|
-
OpenSSL::X509::Store.new.tap(&:set_default_paths)
|
199
|
-
end
|
175
|
+
# Use the default cert store by default, i.e. system ca certs
|
176
|
+
@ssl_cert_store ||= OpenSSL::X509::Store.new.tap(&:set_default_paths)
|
200
177
|
end
|
201
178
|
|
202
179
|
def ssl_verify_mode(ssl)
|
203
180
|
ssl[:verify_mode] || begin
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
181
|
+
if ssl.fetch(:verify, true)
|
182
|
+
OpenSSL::SSL::VERIFY_PEER
|
183
|
+
else
|
184
|
+
OpenSSL::SSL::VERIFY_NONE
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def encoded_body(http_response)
|
190
|
+
body = http_response.body || +''
|
191
|
+
/\bcharset=([^;]+)/.match(http_response['Content-Type']) do |match|
|
192
|
+
content_charset = ::Encoding.find(match[1].strip)
|
193
|
+
body = body.dup if body.frozen?
|
194
|
+
body.force_encoding(content_charset)
|
195
|
+
rescue ArgumentError
|
196
|
+
nil
|
197
|
+
end
|
198
|
+
body
|
199
|
+
end
|
200
|
+
|
201
|
+
def verify_hostname_enabled?(http, ssl)
|
202
|
+
http.respond_to?(:verify_hostname=) && ssl.key?(:verify_hostname)
|
210
203
|
end
|
211
204
|
end
|
212
205
|
end
|
data/lib/faraday/net_http.rb
CHANGED
metadata
CHANGED
@@ -1,155 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday-net_http
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan van der Pas
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
13
|
+
name: net-http
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
|
-
- - "
|
16
|
+
- - ">="
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
20
|
-
type: :
|
18
|
+
version: 0.5.0
|
19
|
+
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
|
-
- - "
|
23
|
+
- - ">="
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '2.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '2.0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '13.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '13.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rspec
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '3.0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: simplecov
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.19.0
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.19.0
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: multipart-parser
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - "~>"
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.1.1
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - "~>"
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.1.1
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: webmock
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '3.4'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '3.4'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - "~>"
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 0.91.1
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - "~>"
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 0.91.1
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop-packaging
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - "~>"
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0.5'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - "~>"
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.5'
|
139
|
-
- !ruby/object:Gem::Dependency
|
140
|
-
name: rubocop-performance
|
141
|
-
requirement: !ruby/object:Gem::Requirement
|
142
|
-
requirements:
|
143
|
-
- - "~>"
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version: '1.0'
|
146
|
-
type: :development
|
147
|
-
prerelease: false
|
148
|
-
version_requirements: !ruby/object:Gem::Requirement
|
149
|
-
requirements:
|
150
|
-
- - "~>"
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
version: '1.0'
|
25
|
+
version: 0.5.0
|
153
26
|
description: Faraday adapter for Net::HTTP
|
154
27
|
email:
|
155
28
|
- janvanderpas@gmail.com
|
@@ -168,8 +41,8 @@ licenses:
|
|
168
41
|
metadata:
|
169
42
|
homepage_uri: https://github.com/lostisland/faraday-net_http
|
170
43
|
source_code_uri: https://github.com/lostisland/faraday-net_http
|
171
|
-
changelog_uri: https://github.com/lostisland/faraday-net_http
|
172
|
-
|
44
|
+
changelog_uri: https://github.com/lostisland/faraday-net_http/releases/tag/v3.4.1
|
45
|
+
rubygems_mfa_required: 'true'
|
173
46
|
rdoc_options: []
|
174
47
|
require_paths:
|
175
48
|
- lib
|
@@ -177,15 +50,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
50
|
requirements:
|
178
51
|
- - ">="
|
179
52
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
53
|
+
version: 3.0.0
|
181
54
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
55
|
requirements:
|
183
56
|
- - ">="
|
184
57
|
- !ruby/object:Gem::Version
|
185
58
|
version: '0'
|
186
59
|
requirements: []
|
187
|
-
rubygems_version: 3.
|
188
|
-
signing_key:
|
60
|
+
rubygems_version: 3.6.7
|
189
61
|
specification_version: 4
|
190
62
|
summary: Faraday adapter for Net::HTTP
|
191
63
|
test_files: []
|