httpx 0.11.3 → 0.14.0
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 +2 -2
- data/doc/release_notes/0_10_1.md +1 -1
- data/doc/release_notes/0_11_1.md +5 -1
- data/doc/release_notes/0_12_0.md +55 -0
- data/doc/release_notes/0_13_0.md +58 -0
- data/doc/release_notes/0_13_1.md +5 -0
- data/doc/release_notes/0_13_2.md +9 -0
- data/doc/release_notes/0_14_0.md +79 -0
- data/lib/httpx.rb +3 -3
- data/lib/httpx/adapters/faraday.rb +4 -6
- data/lib/httpx/altsvc.rb +1 -0
- data/lib/httpx/callbacks.rb +12 -3
- data/lib/httpx/chainable.rb +2 -2
- data/lib/httpx/connection.rb +92 -37
- data/lib/httpx/connection/http1.rb +37 -19
- data/lib/httpx/connection/http2.rb +82 -31
- data/lib/httpx/headers.rb +1 -1
- data/lib/httpx/io.rb +16 -3
- data/lib/httpx/io/ssl.rb +35 -24
- data/lib/httpx/io/tcp.rb +50 -28
- data/lib/httpx/io/tls.rb +218 -0
- data/lib/httpx/io/tls/box.rb +365 -0
- data/lib/httpx/io/tls/context.rb +199 -0
- data/lib/httpx/io/tls/ffi.rb +390 -0
- data/lib/httpx/io/udp.rb +31 -7
- data/lib/httpx/io/unix.rb +27 -12
- data/lib/httpx/options.rb +97 -74
- data/lib/httpx/parser/http1.rb +4 -4
- data/lib/httpx/plugins/aws_sdk_authentication.rb +84 -0
- data/lib/httpx/plugins/aws_sigv4.rb +219 -0
- data/lib/httpx/plugins/basic_authentication.rb +8 -3
- data/lib/httpx/plugins/compression.rb +24 -12
- data/lib/httpx/plugins/compression/brotli.rb +10 -7
- data/lib/httpx/plugins/compression/deflate.rb +8 -10
- data/lib/httpx/plugins/compression/gzip.rb +4 -3
- data/lib/httpx/plugins/cookies.rb +3 -7
- data/lib/httpx/plugins/digest_authentication.rb +5 -5
- data/lib/httpx/plugins/expect.rb +6 -6
- data/lib/httpx/plugins/follow_redirects.rb +4 -4
- data/lib/httpx/plugins/grpc.rb +247 -0
- data/lib/httpx/plugins/grpc/call.rb +62 -0
- data/lib/httpx/plugins/grpc/message.rb +85 -0
- data/lib/httpx/plugins/h2c.rb +43 -58
- data/lib/httpx/plugins/internal_telemetry.rb +93 -0
- data/lib/httpx/plugins/multipart.rb +2 -0
- data/lib/httpx/plugins/multipart/encoder.rb +4 -9
- data/lib/httpx/plugins/multipart/part.rb +1 -1
- data/lib/httpx/plugins/proxy.rb +4 -8
- data/lib/httpx/plugins/proxy/http.rb +1 -1
- data/lib/httpx/plugins/proxy/socks4.rb +8 -0
- data/lib/httpx/plugins/proxy/socks5.rb +8 -0
- data/lib/httpx/plugins/proxy/ssh.rb +3 -3
- data/lib/httpx/plugins/push_promise.rb +3 -2
- data/lib/httpx/plugins/rate_limiter.rb +1 -1
- data/lib/httpx/plugins/retries.rb +15 -16
- data/lib/httpx/plugins/stream.rb +99 -77
- data/lib/httpx/plugins/upgrade.rb +84 -0
- data/lib/httpx/plugins/upgrade/h2.rb +54 -0
- data/lib/httpx/pool.rb +14 -6
- data/lib/httpx/registry.rb +1 -7
- data/lib/httpx/request.rb +36 -3
- data/lib/httpx/resolver/https.rb +3 -11
- data/lib/httpx/resolver/native.rb +7 -3
- data/lib/httpx/response.rb +18 -7
- data/lib/httpx/selector.rb +5 -0
- data/lib/httpx/session.rb +41 -8
- data/lib/httpx/transcoder/body.rb +3 -5
- data/lib/httpx/transcoder/chunker.rb +1 -1
- data/lib/httpx/version.rb +1 -1
- data/sig/callbacks.rbs +2 -0
- data/sig/chainable.rbs +2 -1
- data/sig/connection/http1.rbs +7 -2
- data/sig/connection/http2.rbs +10 -4
- data/sig/options.rbs +16 -22
- data/sig/plugins/aws_sdk_authentication.rbs +19 -0
- data/sig/plugins/aws_sigv4.rbs +64 -0
- data/sig/plugins/basic_authentication.rbs +2 -0
- data/sig/plugins/compression.rbs +7 -5
- data/sig/plugins/compression/brotli.rbs +1 -1
- data/sig/plugins/compression/deflate.rbs +1 -1
- data/sig/plugins/compression/gzip.rbs +1 -1
- data/sig/plugins/cookies.rbs +0 -1
- data/sig/plugins/digest_authentication.rbs +0 -1
- data/sig/plugins/expect.rbs +0 -2
- data/sig/plugins/follow_redirects.rbs +0 -2
- data/sig/plugins/h2c.rbs +5 -10
- data/sig/plugins/persistent.rbs +0 -1
- data/sig/plugins/proxy.rbs +0 -1
- data/sig/plugins/push_promise.rbs +1 -1
- data/sig/plugins/retries.rbs +0 -4
- data/sig/plugins/stream.rbs +17 -16
- data/sig/plugins/upgrade.rbs +23 -0
- data/sig/request.rbs +7 -2
- data/sig/response.rbs +4 -1
- data/sig/session.rbs +4 -0
- metadata +56 -33
- data/lib/httpx/timeout.rb +0 -67
- data/sig/timeout.rbs +0 -29
data/lib/httpx/resolver/https.rb
CHANGED
@@ -55,20 +55,12 @@ module HTTPX
|
|
55
55
|
early_resolve(connection) || resolve(connection)
|
56
56
|
end
|
57
57
|
|
58
|
-
def timeout
|
59
|
-
@connections.map(&:timeout).min
|
60
|
-
end
|
61
|
-
|
62
58
|
def closed?
|
63
|
-
|
64
|
-
|
65
|
-
resolver_connection.closed?
|
59
|
+
true
|
66
60
|
end
|
67
61
|
|
68
|
-
def
|
69
|
-
|
70
|
-
|
71
|
-
resolver_connection.__send__(__method__)
|
62
|
+
def empty?
|
63
|
+
true
|
72
64
|
end
|
73
65
|
|
74
66
|
private
|
@@ -101,7 +101,7 @@ module HTTPX
|
|
101
101
|
transition(:open)
|
102
102
|
end
|
103
103
|
|
104
|
-
|
104
|
+
calculate_interests
|
105
105
|
end
|
106
106
|
|
107
107
|
def <<(connection)
|
@@ -127,10 +127,14 @@ module HTTPX
|
|
127
127
|
|
128
128
|
private
|
129
129
|
|
130
|
+
def calculate_interests
|
131
|
+
!@write_buffer.empty? || @queries.empty? ? :w : :r
|
132
|
+
end
|
133
|
+
|
130
134
|
def consume
|
131
|
-
dread
|
135
|
+
dread if calculate_interests == :r
|
132
136
|
do_retry
|
133
|
-
dwrite
|
137
|
+
dwrite if calculate_interests == :w
|
134
138
|
end
|
135
139
|
|
136
140
|
def do_retry
|
data/lib/httpx/response.rb
CHANGED
@@ -27,8 +27,7 @@ module HTTPX
|
|
27
27
|
@version = version
|
28
28
|
@status = Integer(status)
|
29
29
|
@headers = @options.headers_class.new(headers)
|
30
|
-
@body = @options.response_body_class.new(self,
|
31
|
-
window_size: @options.window_size)
|
30
|
+
@body = @options.response_body_class.new(self, @options)
|
32
31
|
end
|
33
32
|
|
34
33
|
def merge_headers(h)
|
@@ -83,17 +82,22 @@ module HTTPX
|
|
83
82
|
end
|
84
83
|
|
85
84
|
class Body
|
86
|
-
def initialize(response,
|
85
|
+
def initialize(response, options)
|
87
86
|
@response = response
|
88
87
|
@headers = response.headers
|
89
|
-
@
|
90
|
-
@
|
88
|
+
@options = options
|
89
|
+
@threshold_size = options.body_threshold_size
|
90
|
+
@window_size = options.window_size
|
91
91
|
@encoding = response.content_type.charset || Encoding::BINARY
|
92
92
|
@length = 0
|
93
93
|
@buffer = nil
|
94
94
|
@state = :idle
|
95
95
|
end
|
96
96
|
|
97
|
+
def closed?
|
98
|
+
@state == :closed
|
99
|
+
end
|
100
|
+
|
97
101
|
def write(chunk)
|
98
102
|
return if @state == :closed
|
99
103
|
|
@@ -268,8 +272,15 @@ module HTTPX
|
|
268
272
|
@error.message
|
269
273
|
end
|
270
274
|
|
271
|
-
|
272
|
-
|
275
|
+
if Exception.method_defined?(:full_message)
|
276
|
+
def to_s
|
277
|
+
@error.full_message
|
278
|
+
end
|
279
|
+
else
|
280
|
+
def to_s
|
281
|
+
"#{@error.message} (#{@error.class})\n" \
|
282
|
+
"#{@error.backtrace.join("\n") if @error.backtrace}"
|
283
|
+
end
|
273
284
|
end
|
274
285
|
|
275
286
|
def raise_for_status
|
data/lib/httpx/selector.rb
CHANGED
@@ -69,6 +69,11 @@ class HTTPX::Selector
|
|
69
69
|
|
70
70
|
if @selectables.empty?
|
71
71
|
@selectables = selectables
|
72
|
+
|
73
|
+
# do not run event loop if there's nothing to wait on.
|
74
|
+
# this might happen if connect failed and connection was unregistered.
|
75
|
+
return if (!r || r.empty?) && (!w || w.empty?)
|
76
|
+
|
72
77
|
break
|
73
78
|
else
|
74
79
|
@selectables = [*selectables, @selectables]
|
data/lib/httpx/session.rb
CHANGED
@@ -77,7 +77,7 @@ module HTTPX
|
|
77
77
|
end
|
78
78
|
|
79
79
|
def set_connection_callbacks(connection, connections, options)
|
80
|
-
connection.
|
80
|
+
connection.only(:misdirected) do |misdirected_request|
|
81
81
|
other_connection = connection.create_idle(ssl: { alpn_protocols: %w[http/1.1] })
|
82
82
|
other_connection.merge(connection)
|
83
83
|
catch(:coalesced) do
|
@@ -88,11 +88,11 @@ module HTTPX
|
|
88
88
|
misdirected_request.transition(:idle)
|
89
89
|
other_connection.send(misdirected_request)
|
90
90
|
end
|
91
|
-
connection.
|
91
|
+
connection.only(:altsvc) do |alt_origin, origin, alt_params|
|
92
92
|
other_connection = build_altsvc_connection(connection, connections, alt_origin, origin, alt_params, options)
|
93
93
|
connections << other_connection if other_connection
|
94
94
|
end
|
95
|
-
connection.
|
95
|
+
connection.only(:exhausted) do
|
96
96
|
other_connection = connection.create_idle
|
97
97
|
other_connection.merge(connection)
|
98
98
|
catch(:coalesced) do
|
@@ -175,12 +175,18 @@ module HTTPX
|
|
175
175
|
end
|
176
176
|
|
177
177
|
def send_requests(*requests, options)
|
178
|
-
connections = []
|
179
178
|
request_options = @options.merge(options)
|
180
179
|
|
180
|
+
connections = _send_requests(requests, request_options)
|
181
|
+
receive_requests(requests, connections, request_options)
|
182
|
+
end
|
183
|
+
|
184
|
+
def _send_requests(requests, options)
|
185
|
+
connections = []
|
186
|
+
|
181
187
|
requests.each do |request|
|
182
188
|
error = catch(:resolve_error) do
|
183
|
-
connection = find_connection(request, connections,
|
189
|
+
connection = find_connection(request, connections, options)
|
184
190
|
connection.send(request)
|
185
191
|
end
|
186
192
|
next unless error.is_a?(ResolveError)
|
@@ -188,18 +194,33 @@ module HTTPX
|
|
188
194
|
request.emit(:response, ErrorResponse.new(request, error, options))
|
189
195
|
end
|
190
196
|
|
197
|
+
connections
|
198
|
+
end
|
199
|
+
|
200
|
+
def receive_requests(requests, connections, options)
|
191
201
|
responses = []
|
192
202
|
|
193
203
|
begin
|
194
204
|
# guarantee ordered responses
|
195
205
|
loop do
|
196
206
|
request = requests.first
|
197
|
-
pool.next_tick until (response = fetch_response(request, connections,
|
207
|
+
pool.next_tick until (response = fetch_response(request, connections, options))
|
198
208
|
|
199
209
|
responses << response
|
200
210
|
requests.shift
|
201
211
|
|
202
|
-
break if requests.empty?
|
212
|
+
break if requests.empty?
|
213
|
+
|
214
|
+
next unless pool.empty?
|
215
|
+
|
216
|
+
# in some cases, the pool of connections might have been drained because there was some
|
217
|
+
# handshake error, and the error responses have already been emitted, but there was no
|
218
|
+
# opportunity to traverse the requests, hence we're returning only a fraction of the errors
|
219
|
+
# we were supposed to. This effectively fetches the existing responses and return them.
|
220
|
+
while (request = requests.shift)
|
221
|
+
responses << fetch_response(request, connections, options)
|
222
|
+
end
|
223
|
+
break
|
203
224
|
end
|
204
225
|
responses
|
205
226
|
ensure
|
@@ -269,7 +290,19 @@ module HTTPX
|
|
269
290
|
end
|
270
291
|
# :nocov:
|
271
292
|
end
|
293
|
+
end
|
294
|
+
|
295
|
+
unless ENV.grep(/https?_proxy$/i).empty?
|
296
|
+
proxy_session = plugin(:proxy)
|
297
|
+
::HTTPX.send(:remove_const, :Session)
|
298
|
+
::HTTPX.send(:const_set, :Session, proxy_session.class)
|
299
|
+
end
|
272
300
|
|
273
|
-
|
301
|
+
# :nocov:
|
302
|
+
if Session.default_options.debug_level > 2
|
303
|
+
proxy_session = plugin(:internal_telemetry)
|
304
|
+
::HTTPX.send(:remove_const, :Session)
|
305
|
+
::HTTPX.send(:const_set, :Session, proxy_session.class)
|
274
306
|
end
|
307
|
+
# :nocov:
|
275
308
|
end
|
@@ -44,11 +44,9 @@ module HTTPX::Transcoder
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def method_missing(meth, *args, &block)
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
super
|
51
|
-
end
|
47
|
+
return super unless @raw.respond_to?(meth)
|
48
|
+
|
49
|
+
@raw.__send__(meth, *args, &block)
|
52
50
|
end
|
53
51
|
end
|
54
52
|
|
data/lib/httpx/version.rb
CHANGED
data/sig/callbacks.rbs
CHANGED
@@ -6,8 +6,10 @@ module HTTPX
|
|
6
6
|
module Callbacks
|
7
7
|
def on: (Symbol) { (*untyped) -> void } -> void
|
8
8
|
def once: (Symbol) { (*untyped) -> void } -> void
|
9
|
+
def only: (Symbol) { (*untyped) -> void } -> void
|
9
10
|
def emit: (Symbol, *untyped) -> void
|
10
11
|
|
12
|
+
def callbacks_for?: (Symbol) -> bool
|
11
13
|
def callbacks: () -> Hash[Symbol, Array[_Callable]]
|
12
14
|
| (Symbol) -> Array[_Callable]
|
13
15
|
end
|
data/sig/chainable.rbs
CHANGED
@@ -18,7 +18,8 @@ module HTTPX
|
|
18
18
|
| (:cookies) -> Plugins::sessionCookies
|
19
19
|
| (:expect) -> Session
|
20
20
|
| (:follow_redirects) -> Plugins::sessionFollowRedirects
|
21
|
-
| (:
|
21
|
+
| (:upgrade) -> Session
|
22
|
+
| (:h2c) -> Session
|
22
23
|
| (:multipart) -> Session
|
23
24
|
| (:persistent) -> Plugins::sessionPersistent
|
24
25
|
| (:proxy) -> Plugins::sessionProxy
|
data/sig/connection/http1.rbs
CHANGED
@@ -4,6 +4,7 @@ module HTTPX
|
|
4
4
|
include Loggable
|
5
5
|
|
6
6
|
attr_reader pending: Array[Request]
|
7
|
+
attr_reader requests: Array[Request]
|
7
8
|
|
8
9
|
@options: Options
|
9
10
|
@max_concurrent_requests: Integer
|
@@ -31,7 +32,7 @@ module HTTPX
|
|
31
32
|
|
32
33
|
def on_headers: (Hash[String, Array[String]] headers) -> void
|
33
34
|
|
34
|
-
def on_trailers: (
|
35
|
+
def on_trailers: (Hash[String, Array[String]] headers) -> void
|
35
36
|
|
36
37
|
def on_data: (string chunk) -> void
|
37
38
|
|
@@ -51,7 +52,7 @@ module HTTPX
|
|
51
52
|
|
52
53
|
def disable_pipelining: () -> void
|
53
54
|
|
54
|
-
def
|
55
|
+
def set_protocol_headers: (Request) -> void
|
55
56
|
|
56
57
|
def headline_uri: (Request) -> String
|
57
58
|
|
@@ -59,6 +60,10 @@ module HTTPX
|
|
59
60
|
|
60
61
|
def join_headers: (Request request) -> void
|
61
62
|
|
63
|
+
def join_trailers: (Request request) -> void
|
64
|
+
|
65
|
+
def join_headers2: (Headers headers) -> void
|
66
|
+
|
62
67
|
def join_body: (Request request) -> void
|
63
68
|
|
64
69
|
def capitalized: (String field) -> String
|
data/sig/connection/http2.rbs
CHANGED
@@ -3,7 +3,7 @@ module HTTPX
|
|
3
3
|
include Callbacks
|
4
4
|
include Loggable
|
5
5
|
|
6
|
-
attr_reader streams: Hash[HTTP2Next::Stream
|
6
|
+
attr_reader streams: Hash[Request, HTTP2Next::Stream]
|
7
7
|
attr_reader pending: Array[Request]
|
8
8
|
|
9
9
|
@options: Options
|
@@ -13,7 +13,7 @@ module HTTPX
|
|
13
13
|
@pings: Array[String]
|
14
14
|
@buffer: Buffer
|
15
15
|
|
16
|
-
def interests: () -> io_interests
|
16
|
+
def interests: () -> io_interests?
|
17
17
|
|
18
18
|
def close: () -> void
|
19
19
|
|
@@ -23,6 +23,8 @@ module HTTPX
|
|
23
23
|
|
24
24
|
def <<: (String) -> void
|
25
25
|
|
26
|
+
def can_buffer_more_requests: () -> bool
|
27
|
+
|
26
28
|
def send: (Request) -> void
|
27
29
|
|
28
30
|
def consume: () -> void
|
@@ -41,7 +43,7 @@ module HTTPX
|
|
41
43
|
|
42
44
|
def headline_uri: (Request) -> String
|
43
45
|
|
44
|
-
def
|
46
|
+
def set_protocol_headers: (Request) -> void
|
45
47
|
|
46
48
|
def handle: (Request request, HTTP2Next::Stream stream) -> void
|
47
49
|
|
@@ -51,13 +53,17 @@ module HTTPX
|
|
51
53
|
|
52
54
|
def join_headers: (HTTP2Next::Stream stream, Request request) -> void
|
53
55
|
|
56
|
+
def join_trailers: (HTTP2Next::Stream stream, Request request) -> void
|
57
|
+
|
54
58
|
def join_body: (HTTP2Next::Stream stream, Request request) -> void
|
55
59
|
|
56
60
|
def on_stream_headers: (HTTP2Next::Stream stream, Request request, Array[[String, String]] headers) -> void
|
57
61
|
|
62
|
+
def on_stream_trailers: (HTTP2Next::Stream stream, Request request, Array[[String, String]] headers) -> void
|
63
|
+
|
58
64
|
def on_stream_data: (HTTP2Next::Stream stream, Request request, string data) -> void
|
59
65
|
|
60
|
-
def on_stream_close: (HTTP2Next::Stream stream, Request request, Symbol? error) -> void
|
66
|
+
def on_stream_close: (HTTP2Next::Stream stream, Request request, (Symbol | StandardError)? error) -> void
|
61
67
|
|
62
68
|
def on_frame: (string bytes) -> void
|
63
69
|
|
data/sig/options.rbs
CHANGED
@@ -5,68 +5,67 @@ module HTTPX
|
|
5
5
|
WINDOW_SIZE: Integer
|
6
6
|
MAX_BODY_THRESHOLD_SIZE: Integer
|
7
7
|
|
8
|
+
type timeout_type = :connect_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout
|
9
|
+
type timeout = Hash[timeout_type, Numeric?]
|
10
|
+
|
8
11
|
def self.new: (options) -> instance
|
9
12
|
| () -> instance
|
10
13
|
|
14
|
+
# headers
|
15
|
+
attr_reader uri: URI?
|
16
|
+
def uri=: (uri) -> void
|
17
|
+
|
11
18
|
# headers
|
12
19
|
attr_reader headers: Headers?
|
13
20
|
def headers=: (headers) -> void
|
14
|
-
def with_headers: (headers) -> instance
|
15
21
|
|
16
22
|
# timeout
|
17
|
-
attr_reader timeout:
|
18
|
-
def timeout=: (
|
19
|
-
def with_timeout: (Hash[Symbol, untyped] | Timeout) -> instance
|
23
|
+
attr_reader timeout: timeout
|
24
|
+
def timeout=: (timeout) -> void
|
20
25
|
|
21
26
|
# max_concurrent_requests
|
22
27
|
attr_reader max_concurrent_requests: Integer?
|
23
28
|
def max_concurrent_requests=: (Integer) -> void
|
24
|
-
def with_max_concurrent_requests: (Integer) -> instance
|
25
29
|
|
26
30
|
# max_requests
|
27
31
|
attr_reader max_requests: Integer?
|
28
32
|
def max_requests=: (Integer) -> void
|
29
|
-
def with_max_requests: (Integer) -> instance
|
30
33
|
|
31
34
|
# window_size
|
32
35
|
attr_reader window_size: int?
|
33
36
|
def window_size=: (int) -> void
|
34
|
-
def with_window_size: (int) -> instance
|
35
37
|
|
36
38
|
# body_threshold_size
|
37
39
|
attr_reader body_threshold_size: int?
|
38
40
|
def body_threshold_size=: (int) -> void
|
39
|
-
def with_body_threshold_size: (int) -> instance
|
40
41
|
|
41
42
|
# transport
|
42
43
|
attr_reader transport: _ToS?
|
43
44
|
def transport=: (_ToS) -> void
|
44
|
-
def with_transport: (_ToS) -> instance
|
45
45
|
|
46
46
|
# transport_options
|
47
47
|
attr_reader transport_options: Hash[untyped, untyped]?
|
48
48
|
def transport_options=: (Hash[untyped, untyped]) -> void
|
49
|
-
|
49
|
+
|
50
|
+
# addresses
|
51
|
+
attr_reader addresses: _ToAry[untyped]?
|
52
|
+
def addresses=: (_ToAry[untyped]) -> void
|
50
53
|
|
51
54
|
# params
|
52
55
|
attr_reader params: Transcoder::urlencoded_input?
|
53
56
|
def params=: (Transcoder::urlencoded_input) -> void
|
54
|
-
def with_params: (Transcoder::urlencoded_input) -> instance
|
55
57
|
|
56
58
|
# form
|
57
59
|
attr_reader form: Transcoder::urlencoded_input?
|
58
60
|
def form=: (Transcoder::urlencoded_input) -> void
|
59
|
-
def with_form: (Transcoder::urlencoded_input) -> instance
|
60
61
|
|
61
62
|
# json
|
62
63
|
attr_reader json: _ToJson?
|
63
64
|
def json=: (_ToJson) -> void
|
64
|
-
def with_json: (_ToJson) -> instance
|
65
65
|
|
66
66
|
# body
|
67
67
|
attr_reader body: bodyIO?
|
68
68
|
def body=: (bodyIO) -> void
|
69
|
-
def with_body: (bodyIO) -> instance
|
70
69
|
|
71
70
|
# ssl
|
72
71
|
|
@@ -79,32 +78,27 @@ module HTTPX
|
|
79
78
|
# request_class
|
80
79
|
attr_reader request_class: singleton(Request)
|
81
80
|
def request_class=: (singleton(Request)) -> void
|
82
|
-
def with_request_class: (singleton(Request)) -> instance
|
83
81
|
|
84
82
|
# io
|
85
|
-
|
86
|
-
|
87
|
-
def
|
83
|
+
type io_option = _ToIO | Hash[String, _ToIO]
|
84
|
+
attr_reader io: io_option?
|
85
|
+
def io=: (io_option) -> void
|
88
86
|
|
89
87
|
# fallback_protocol
|
90
88
|
attr_reader fallback_protocol: String?
|
91
89
|
def fallback_protocol=: (String) -> void
|
92
|
-
def with_fallback_protocol: (String) -> instance
|
93
90
|
|
94
91
|
# debug
|
95
92
|
attr_reader debug: _IOLogger?
|
96
93
|
def debug=: (_IOLogger) -> void
|
97
|
-
def with_debug: (_IOLogger) -> instance
|
98
94
|
|
99
95
|
# debug_level
|
100
96
|
attr_reader debug_level: Integer?
|
101
97
|
def debug_level=: (Integer) -> void
|
102
|
-
def with_debug_level: (Integer) -> instance
|
103
98
|
|
104
99
|
# persistent
|
105
100
|
attr_reader persistent: bool?
|
106
101
|
def persistent=: (bool) -> void
|
107
|
-
def with_persistent: (bool) -> instance
|
108
102
|
|
109
103
|
def ==: (untyped other) -> bool
|
110
104
|
def merge: (_ToHash other) -> instance
|