httpx 0.24.5 → 1.0.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/LICENSE.txt +0 -48
- data/README.md +4 -13
- data/doc/release_notes/0_24_4.md +3 -3
- data/doc/release_notes/0_24_6.md +5 -0
- data/doc/release_notes/1_0_0.md +60 -0
- data/lib/httpx/adapters/datadog.rb +28 -97
- data/lib/httpx/adapters/faraday.rb +9 -52
- data/lib/httpx/adapters/webmock.rb +2 -7
- data/lib/httpx/altsvc.rb +4 -22
- data/lib/httpx/base64.rb +27 -0
- data/lib/httpx/chainable.rb +2 -25
- data/lib/httpx/connection.rb +11 -32
- data/lib/httpx/domain_name.rb +5 -12
- data/lib/httpx/errors.rb +0 -2
- data/lib/httpx/extensions.rb +0 -124
- data/lib/httpx/io/ssl.rb +26 -59
- data/lib/httpx/io/tcp.rb +27 -68
- data/lib/httpx/io/udp.rb +13 -48
- data/lib/httpx/io/unix.rb +1 -8
- data/lib/httpx/loggable.rb +4 -19
- data/lib/httpx/options.rb +24 -84
- data/lib/httpx/plugins/{authentication → auth}/basic.rb +1 -5
- data/lib/httpx/plugins/{authentication → auth}/digest.rb +2 -5
- data/lib/httpx/plugins/{authentication → auth}/ntlm.rb +1 -3
- data/lib/httpx/plugins/{authentication → auth}/socks5.rb +0 -2
- data/lib/httpx/plugins/auth.rb +25 -0
- data/lib/httpx/plugins/aws_sigv4.rb +0 -1
- data/lib/httpx/plugins/{basic_authentication.rb → basic_auth.rb} +5 -6
- data/lib/httpx/plugins/brotli.rb +50 -0
- data/lib/httpx/plugins/circuit_breaker/circuit.rb +40 -16
- data/lib/httpx/plugins/circuit_breaker/circuit_store.rb +16 -5
- data/lib/httpx/plugins/circuit_breaker.rb +11 -4
- data/lib/httpx/plugins/cookies/set_cookie_parser.rb +0 -2
- data/lib/httpx/plugins/cookies.rb +1 -1
- data/lib/httpx/plugins/{digest_authentication.rb → digest_auth.rb} +5 -5
- data/lib/httpx/plugins/follow_redirects.rb +21 -24
- data/lib/httpx/plugins/grpc/grpc_encoding.rb +82 -0
- data/lib/httpx/plugins/grpc/message.rb +7 -39
- data/lib/httpx/plugins/grpc.rb +15 -21
- data/lib/httpx/plugins/h2c.rb +0 -1
- data/lib/httpx/plugins/{ntlm_authentication.rb → ntlm_auth.rb} +5 -5
- data/lib/httpx/plugins/oauth.rb +2 -2
- data/lib/httpx/plugins/proxy/http.rb +0 -2
- data/lib/httpx/plugins/proxy/socks4.rb +0 -4
- data/lib/httpx/plugins/proxy/socks5.rb +1 -5
- data/lib/httpx/plugins/proxy.rb +3 -32
- data/lib/httpx/plugins/retries.rb +3 -4
- data/lib/httpx/plugins/stream.rb +4 -6
- data/lib/httpx/punycode.rb +9 -291
- data/lib/httpx/request/body.rb +145 -0
- data/lib/httpx/request.rb +2 -119
- data/lib/httpx/resolver/https.rb +1 -1
- data/lib/httpx/resolver/native.rb +6 -14
- data/lib/httpx/resolver/resolver.rb +1 -1
- data/lib/httpx/resolver/system.rb +11 -9
- data/lib/httpx/response/body.rb +206 -0
- data/lib/httpx/response/buffer.rb +90 -0
- data/lib/httpx/response.rb +5 -208
- data/lib/httpx/selector.rb +0 -2
- data/lib/httpx/session.rb +3 -10
- data/lib/httpx/transcoder/body.rb +0 -1
- data/lib/httpx/transcoder/deflate.rb +37 -0
- data/lib/httpx/transcoder/form.rb +52 -32
- data/lib/httpx/transcoder/gzip.rb +74 -0
- data/lib/httpx/transcoder/json.rb +2 -4
- data/lib/httpx/transcoder/multipart/decoder.rb +139 -0
- data/lib/httpx/{plugins → transcoder}/multipart/encoder.rb +3 -3
- data/lib/httpx/{plugins → transcoder}/multipart/mime_type_detector.rb +1 -1
- data/lib/httpx/{plugins → transcoder}/multipart/part.rb +3 -2
- data/lib/httpx/transcoder/multipart.rb +17 -0
- data/lib/httpx/transcoder/utils/body_reader.rb +46 -0
- data/lib/httpx/transcoder/utils/deflater.rb +72 -0
- data/lib/httpx/transcoder/xml.rb +0 -2
- data/lib/httpx/transcoder.rb +2 -2
- data/lib/httpx/utils.rb +10 -20
- data/lib/httpx/version.rb +1 -1
- data/lib/httpx.rb +0 -8
- data/sig/chainable.rbs +5 -6
- data/sig/connection.rbs +0 -1
- data/sig/errors.rbs +0 -3
- data/sig/httpx.rbs +2 -1
- data/sig/io/unix.rbs +1 -1
- data/sig/options.rbs +12 -8
- data/sig/plugins/{authentication → auth}/basic.rbs +0 -2
- data/sig/plugins/auth.rbs +13 -0
- data/sig/plugins/{basic_authentication.rbs → basic_auth.rbs} +2 -2
- data/sig/plugins/brotli.rbs +22 -0
- data/sig/plugins/circuit_breaker.rbs +7 -3
- data/sig/plugins/compression.rbs +0 -2
- data/sig/plugins/{digest_authentication.rbs → digest_auth.rbs} +2 -2
- data/sig/plugins/follow_redirects.rbs +0 -1
- data/sig/plugins/grpc/call.rbs +19 -0
- data/sig/plugins/grpc/grpc_encoding.rbs +33 -0
- data/sig/plugins/grpc/message.rbs +17 -0
- data/sig/plugins/grpc.rbs +2 -32
- data/sig/plugins/{ntlm_authentication.rbs → ntlm_auth.rbs} +2 -2
- data/sig/plugins/oauth.rbs +1 -1
- data/sig/plugins/proxy/socks4.rbs +2 -3
- data/sig/plugins/proxy/socks5.rbs +0 -1
- data/sig/plugins/proxy/ssh.rbs +1 -1
- data/sig/plugins/response_cache.rbs +5 -2
- data/sig/request/body.rbs +42 -0
- data/sig/request.rbs +1 -27
- data/sig/resolver/resolver.rbs +1 -1
- data/sig/response/body.rbs +52 -0
- data/sig/response/buffer.rbs +24 -0
- data/sig/response.rbs +0 -39
- data/sig/session.rbs +2 -0
- data/sig/transcoder/body.rbs +4 -3
- data/sig/transcoder/deflate.rbs +11 -0
- data/sig/transcoder/form.rbs +5 -3
- data/sig/transcoder/gzip.rbs +24 -0
- data/sig/transcoder/json.rbs +4 -2
- data/sig/{plugins → transcoder}/multipart.rbs +3 -10
- data/sig/transcoder/utils/body_reader.rbs +15 -0
- data/sig/transcoder/utils/deflater.rbs +29 -0
- data/sig/transcoder.rbs +18 -2
- metadata +52 -34
- data/lib/httpx/plugins/authentication.rb +0 -24
- data/lib/httpx/plugins/compression/brotli.rb +0 -54
- data/lib/httpx/plugins/compression/deflate.rb +0 -54
- data/lib/httpx/plugins/compression/gzip.rb +0 -90
- data/lib/httpx/plugins/compression.rb +0 -165
- data/lib/httpx/plugins/multipart/decoder.rb +0 -137
- data/lib/httpx/plugins/multipart.rb +0 -96
- data/sig/plugins/authentication.rbs +0 -13
- data/sig/plugins/compression/brotli.rbs +0 -21
- data/sig/plugins/compression/deflate.rbs +0 -17
- data/sig/plugins/compression/gzip.rbs +0 -29
- /data/sig/plugins/{authentication → auth}/digest.rbs +0 -0
- /data/sig/plugins/{authentication → auth}/ntlm.rbs +0 -0
- /data/sig/plugins/{authentication → auth}/socks5.rbs +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module HTTPX
|
|
2
|
+
module Transcoder
|
|
3
|
+
class Deflater
|
|
4
|
+
extend Forwardable
|
|
5
|
+
|
|
6
|
+
@body: BodyReader
|
|
7
|
+
@buffer: Response::Buffer?
|
|
8
|
+
@body: _Encoder | StringIO
|
|
9
|
+
@closed: bool
|
|
10
|
+
|
|
11
|
+
attr_reader content_type: String
|
|
12
|
+
|
|
13
|
+
def initialize: (_Encoder body) -> void
|
|
14
|
+
|
|
15
|
+
def bytesize: () -> (Integer | Float)
|
|
16
|
+
|
|
17
|
+
def read: (?int? length, ?string outbuf) -> String?
|
|
18
|
+
|
|
19
|
+
def close: () -> void
|
|
20
|
+
|
|
21
|
+
def deflate: (String? chunk) -> String?
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def buffer_deflate!: () -> void
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/sig/transcoder.rbs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module HTTPX
|
|
2
|
-
type bodyIO = _Reader | _Each[
|
|
2
|
+
type bodyIO = _Reader | _Each[String] | _ToS
|
|
3
3
|
|
|
4
|
-
type body_encoder = Transcoder::_Encoder | _Each[String]
|
|
4
|
+
type body_encoder = (Transcoder::_Encoder & _ToS) | (Transcoder::_Encoder & _Reader) | (Transcoder::_Encoder & _Each[String])
|
|
5
5
|
|
|
6
6
|
module Transcoder
|
|
7
7
|
def self?.normalize_keys: [U] (_ToS key, _ToAry[untyped] | _ToHash[_ToS, untyped] | untyped value, ?(^(untyped value) -> bool | nil) cond) { (String, ?untyped) -> U } -> U
|
|
@@ -18,10 +18,26 @@ module HTTPX
|
|
|
18
18
|
|
|
19
19
|
interface _Encoder
|
|
20
20
|
def bytesize: () -> (Integer | Float)
|
|
21
|
+
|
|
22
|
+
def content_type: () -> String
|
|
21
23
|
end
|
|
22
24
|
|
|
23
25
|
interface _Decoder
|
|
24
26
|
def call: (Response response, *untyped) -> untyped
|
|
25
27
|
end
|
|
28
|
+
|
|
29
|
+
interface _Inflater
|
|
30
|
+
def initialize: (Integer | Float bytesize) -> void
|
|
31
|
+
|
|
32
|
+
def call: (String chunk) -> String
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
interface _Deflater
|
|
36
|
+
def initialize: (Response body) -> void
|
|
37
|
+
|
|
38
|
+
def deflate: () -> void
|
|
39
|
+
|
|
40
|
+
def call: (StringIO | File buffer, ?chunk_size: Integer) ?{ (String chunk) -> void } -> void
|
|
41
|
+
end
|
|
26
42
|
end
|
|
27
43
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: httpx
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tiago Cardoso
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-10-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: http-2-next
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 0.
|
|
19
|
+
version: 1.0.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 0.
|
|
26
|
+
version: 1.0.0
|
|
27
27
|
description: A client library for making HTTP requests from Ruby.
|
|
28
28
|
email:
|
|
29
29
|
- cardoso_tiago@hotmail.com
|
|
@@ -105,6 +105,7 @@ extra_rdoc_files:
|
|
|
105
105
|
- doc/release_notes/0_24_3.md
|
|
106
106
|
- doc/release_notes/0_24_4.md
|
|
107
107
|
- doc/release_notes/0_24_5.md
|
|
108
|
+
- doc/release_notes/0_24_6.md
|
|
108
109
|
- doc/release_notes/0_2_0.md
|
|
109
110
|
- doc/release_notes/0_2_1.md
|
|
110
111
|
- doc/release_notes/0_3_0.md
|
|
@@ -126,6 +127,7 @@ extra_rdoc_files:
|
|
|
126
127
|
- doc/release_notes/0_8_1.md
|
|
127
128
|
- doc/release_notes/0_8_2.md
|
|
128
129
|
- doc/release_notes/0_9_0.md
|
|
130
|
+
- doc/release_notes/1_0_0.md
|
|
129
131
|
files:
|
|
130
132
|
- LICENSE.txt
|
|
131
133
|
- README.md
|
|
@@ -202,6 +204,7 @@ files:
|
|
|
202
204
|
- doc/release_notes/0_24_3.md
|
|
203
205
|
- doc/release_notes/0_24_4.md
|
|
204
206
|
- doc/release_notes/0_24_5.md
|
|
207
|
+
- doc/release_notes/0_24_6.md
|
|
205
208
|
- doc/release_notes/0_2_0.md
|
|
206
209
|
- doc/release_notes/0_2_1.md
|
|
207
210
|
- doc/release_notes/0_3_0.md
|
|
@@ -223,12 +226,14 @@ files:
|
|
|
223
226
|
- doc/release_notes/0_8_1.md
|
|
224
227
|
- doc/release_notes/0_8_2.md
|
|
225
228
|
- doc/release_notes/0_9_0.md
|
|
229
|
+
- doc/release_notes/1_0_0.md
|
|
226
230
|
- lib/httpx.rb
|
|
227
231
|
- lib/httpx/adapters/datadog.rb
|
|
228
232
|
- lib/httpx/adapters/faraday.rb
|
|
229
233
|
- lib/httpx/adapters/sentry.rb
|
|
230
234
|
- lib/httpx/adapters/webmock.rb
|
|
231
235
|
- lib/httpx/altsvc.rb
|
|
236
|
+
- lib/httpx/base64.rb
|
|
232
237
|
- lib/httpx/buffer.rb
|
|
233
238
|
- lib/httpx/callbacks.rb
|
|
234
239
|
- lib/httpx/chainable.rb
|
|
@@ -247,39 +252,32 @@ files:
|
|
|
247
252
|
- lib/httpx/loggable.rb
|
|
248
253
|
- lib/httpx/options.rb
|
|
249
254
|
- lib/httpx/parser/http1.rb
|
|
250
|
-
- lib/httpx/plugins/
|
|
251
|
-
- lib/httpx/plugins/
|
|
252
|
-
- lib/httpx/plugins/
|
|
253
|
-
- lib/httpx/plugins/
|
|
254
|
-
- lib/httpx/plugins/
|
|
255
|
+
- lib/httpx/plugins/auth.rb
|
|
256
|
+
- lib/httpx/plugins/auth/basic.rb
|
|
257
|
+
- lib/httpx/plugins/auth/digest.rb
|
|
258
|
+
- lib/httpx/plugins/auth/ntlm.rb
|
|
259
|
+
- lib/httpx/plugins/auth/socks5.rb
|
|
255
260
|
- lib/httpx/plugins/aws_sdk_authentication.rb
|
|
256
261
|
- lib/httpx/plugins/aws_sigv4.rb
|
|
257
|
-
- lib/httpx/plugins/
|
|
262
|
+
- lib/httpx/plugins/basic_auth.rb
|
|
263
|
+
- lib/httpx/plugins/brotli.rb
|
|
258
264
|
- lib/httpx/plugins/circuit_breaker.rb
|
|
259
265
|
- lib/httpx/plugins/circuit_breaker/circuit.rb
|
|
260
266
|
- lib/httpx/plugins/circuit_breaker/circuit_store.rb
|
|
261
|
-
- lib/httpx/plugins/compression.rb
|
|
262
|
-
- lib/httpx/plugins/compression/brotli.rb
|
|
263
|
-
- lib/httpx/plugins/compression/deflate.rb
|
|
264
|
-
- lib/httpx/plugins/compression/gzip.rb
|
|
265
267
|
- lib/httpx/plugins/cookies.rb
|
|
266
268
|
- lib/httpx/plugins/cookies/cookie.rb
|
|
267
269
|
- lib/httpx/plugins/cookies/jar.rb
|
|
268
270
|
- lib/httpx/plugins/cookies/set_cookie_parser.rb
|
|
269
|
-
- lib/httpx/plugins/
|
|
271
|
+
- lib/httpx/plugins/digest_auth.rb
|
|
270
272
|
- lib/httpx/plugins/expect.rb
|
|
271
273
|
- lib/httpx/plugins/follow_redirects.rb
|
|
272
274
|
- lib/httpx/plugins/grpc.rb
|
|
273
275
|
- lib/httpx/plugins/grpc/call.rb
|
|
276
|
+
- lib/httpx/plugins/grpc/grpc_encoding.rb
|
|
274
277
|
- lib/httpx/plugins/grpc/message.rb
|
|
275
278
|
- lib/httpx/plugins/h2c.rb
|
|
276
279
|
- lib/httpx/plugins/internal_telemetry.rb
|
|
277
|
-
- lib/httpx/plugins/
|
|
278
|
-
- lib/httpx/plugins/multipart/decoder.rb
|
|
279
|
-
- lib/httpx/plugins/multipart/encoder.rb
|
|
280
|
-
- lib/httpx/plugins/multipart/mime_type_detector.rb
|
|
281
|
-
- lib/httpx/plugins/multipart/part.rb
|
|
282
|
-
- lib/httpx/plugins/ntlm_authentication.rb
|
|
280
|
+
- lib/httpx/plugins/ntlm_auth.rb
|
|
283
281
|
- lib/httpx/plugins/oauth.rb
|
|
284
282
|
- lib/httpx/plugins/persistent.rb
|
|
285
283
|
- lib/httpx/plugins/proxy.rb
|
|
@@ -301,6 +299,7 @@ files:
|
|
|
301
299
|
- lib/httpx/pool.rb
|
|
302
300
|
- lib/httpx/punycode.rb
|
|
303
301
|
- lib/httpx/request.rb
|
|
302
|
+
- lib/httpx/request/body.rb
|
|
304
303
|
- lib/httpx/resolver.rb
|
|
305
304
|
- lib/httpx/resolver/https.rb
|
|
306
305
|
- lib/httpx/resolver/multi.rb
|
|
@@ -308,6 +307,8 @@ files:
|
|
|
308
307
|
- lib/httpx/resolver/resolver.rb
|
|
309
308
|
- lib/httpx/resolver/system.rb
|
|
310
309
|
- lib/httpx/response.rb
|
|
310
|
+
- lib/httpx/response/body.rb
|
|
311
|
+
- lib/httpx/response/buffer.rb
|
|
311
312
|
- lib/httpx/selector.rb
|
|
312
313
|
- lib/httpx/session.rb
|
|
313
314
|
- lib/httpx/session2.rb
|
|
@@ -316,8 +317,17 @@ files:
|
|
|
316
317
|
- lib/httpx/transcoder.rb
|
|
317
318
|
- lib/httpx/transcoder/body.rb
|
|
318
319
|
- lib/httpx/transcoder/chunker.rb
|
|
320
|
+
- lib/httpx/transcoder/deflate.rb
|
|
319
321
|
- lib/httpx/transcoder/form.rb
|
|
322
|
+
- lib/httpx/transcoder/gzip.rb
|
|
320
323
|
- lib/httpx/transcoder/json.rb
|
|
324
|
+
- lib/httpx/transcoder/multipart.rb
|
|
325
|
+
- lib/httpx/transcoder/multipart/decoder.rb
|
|
326
|
+
- lib/httpx/transcoder/multipart/encoder.rb
|
|
327
|
+
- lib/httpx/transcoder/multipart/mime_type_detector.rb
|
|
328
|
+
- lib/httpx/transcoder/multipart/part.rb
|
|
329
|
+
- lib/httpx/transcoder/utils/body_reader.rb
|
|
330
|
+
- lib/httpx/transcoder/utils/deflater.rb
|
|
321
331
|
- lib/httpx/transcoder/xml.rb
|
|
322
332
|
- lib/httpx/utils.rb
|
|
323
333
|
- lib/httpx/version.rb
|
|
@@ -339,29 +349,29 @@ files:
|
|
|
339
349
|
- sig/loggable.rbs
|
|
340
350
|
- sig/options.rbs
|
|
341
351
|
- sig/parser/http1.rbs
|
|
342
|
-
- sig/plugins/
|
|
343
|
-
- sig/plugins/
|
|
344
|
-
- sig/plugins/
|
|
345
|
-
- sig/plugins/
|
|
346
|
-
- sig/plugins/
|
|
352
|
+
- sig/plugins/auth.rbs
|
|
353
|
+
- sig/plugins/auth/basic.rbs
|
|
354
|
+
- sig/plugins/auth/digest.rbs
|
|
355
|
+
- sig/plugins/auth/ntlm.rbs
|
|
356
|
+
- sig/plugins/auth/socks5.rbs
|
|
347
357
|
- sig/plugins/aws_sdk_authentication.rbs
|
|
348
358
|
- sig/plugins/aws_sigv4.rbs
|
|
349
|
-
- sig/plugins/
|
|
359
|
+
- sig/plugins/basic_auth.rbs
|
|
360
|
+
- sig/plugins/brotli.rbs
|
|
350
361
|
- sig/plugins/circuit_breaker.rbs
|
|
351
362
|
- sig/plugins/compression.rbs
|
|
352
|
-
- sig/plugins/compression/brotli.rbs
|
|
353
|
-
- sig/plugins/compression/deflate.rbs
|
|
354
|
-
- sig/plugins/compression/gzip.rbs
|
|
355
363
|
- sig/plugins/cookies.rbs
|
|
356
364
|
- sig/plugins/cookies/cookie.rbs
|
|
357
365
|
- sig/plugins/cookies/jar.rbs
|
|
358
|
-
- sig/plugins/
|
|
366
|
+
- sig/plugins/digest_auth.rbs
|
|
359
367
|
- sig/plugins/expect.rbs
|
|
360
368
|
- sig/plugins/follow_redirects.rbs
|
|
361
369
|
- sig/plugins/grpc.rbs
|
|
370
|
+
- sig/plugins/grpc/call.rbs
|
|
371
|
+
- sig/plugins/grpc/grpc_encoding.rbs
|
|
372
|
+
- sig/plugins/grpc/message.rbs
|
|
362
373
|
- sig/plugins/h2c.rbs
|
|
363
|
-
- sig/plugins/
|
|
364
|
-
- sig/plugins/ntlm_authentication.rbs
|
|
374
|
+
- sig/plugins/ntlm_auth.rbs
|
|
365
375
|
- sig/plugins/oauth.rbs
|
|
366
376
|
- sig/plugins/persistent.rbs
|
|
367
377
|
- sig/plugins/proxy.rbs
|
|
@@ -377,6 +387,7 @@ files:
|
|
|
377
387
|
- sig/plugins/upgrade.rbs
|
|
378
388
|
- sig/pool.rbs
|
|
379
389
|
- sig/request.rbs
|
|
390
|
+
- sig/request/body.rbs
|
|
380
391
|
- sig/resolver.rbs
|
|
381
392
|
- sig/resolver/https.rbs
|
|
382
393
|
- sig/resolver/multi.rbs
|
|
@@ -384,14 +395,21 @@ files:
|
|
|
384
395
|
- sig/resolver/resolver.rbs
|
|
385
396
|
- sig/resolver/system.rbs
|
|
386
397
|
- sig/response.rbs
|
|
398
|
+
- sig/response/body.rbs
|
|
399
|
+
- sig/response/buffer.rbs
|
|
387
400
|
- sig/selector.rbs
|
|
388
401
|
- sig/session.rbs
|
|
389
402
|
- sig/timers.rbs
|
|
390
403
|
- sig/transcoder.rbs
|
|
391
404
|
- sig/transcoder/body.rbs
|
|
392
405
|
- sig/transcoder/chunker.rbs
|
|
406
|
+
- sig/transcoder/deflate.rbs
|
|
393
407
|
- sig/transcoder/form.rbs
|
|
408
|
+
- sig/transcoder/gzip.rbs
|
|
394
409
|
- sig/transcoder/json.rbs
|
|
410
|
+
- sig/transcoder/multipart.rbs
|
|
411
|
+
- sig/transcoder/utils/body_reader.rbs
|
|
412
|
+
- sig/transcoder/utils/deflater.rbs
|
|
395
413
|
- sig/transcoder/xml.rbs
|
|
396
414
|
- sig/utils.rbs
|
|
397
415
|
homepage: https://gitlab.com/os85/httpx
|
|
@@ -412,7 +430,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
412
430
|
requirements:
|
|
413
431
|
- - ">="
|
|
414
432
|
- !ruby/object:Gem::Version
|
|
415
|
-
version:
|
|
433
|
+
version: 2.7.0
|
|
416
434
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
417
435
|
requirements:
|
|
418
436
|
- - ">="
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module HTTPX
|
|
4
|
-
module Plugins
|
|
5
|
-
#
|
|
6
|
-
# This plugin adds a shim +authentication+ method to the session, which will fill
|
|
7
|
-
# the HTTP Authorization header.
|
|
8
|
-
#
|
|
9
|
-
# https://gitlab.com/os85/httpx/wikis/Authentication#authentication
|
|
10
|
-
#
|
|
11
|
-
module Authentication
|
|
12
|
-
module InstanceMethods
|
|
13
|
-
def authentication(token)
|
|
14
|
-
with(headers: { "authorization" => token })
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def bearer_auth(token)
|
|
18
|
-
authentication("Bearer #{token}")
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
register_plugin :authentication, Authentication
|
|
23
|
-
end
|
|
24
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module HTTPX
|
|
4
|
-
module Plugins
|
|
5
|
-
module Compression
|
|
6
|
-
module Brotli
|
|
7
|
-
class << self
|
|
8
|
-
def load_dependencies(klass)
|
|
9
|
-
require "brotli"
|
|
10
|
-
klass.plugin(:compression)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def extra_options(options)
|
|
14
|
-
options.merge(encodings: options.encodings.merge("br" => self))
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
module Deflater
|
|
19
|
-
module_function
|
|
20
|
-
|
|
21
|
-
def deflate(raw, buffer = "".b, chunk_size: 16_384)
|
|
22
|
-
while (chunk = raw.read(chunk_size))
|
|
23
|
-
compressed = ::Brotli.deflate(chunk)
|
|
24
|
-
buffer << compressed
|
|
25
|
-
yield compressed if block_given?
|
|
26
|
-
end
|
|
27
|
-
buffer
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
class Inflater
|
|
32
|
-
def initialize(bytesize)
|
|
33
|
-
@bytesize = bytesize
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def inflate(chunk)
|
|
37
|
-
::Brotli.inflate(chunk)
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
module_function
|
|
42
|
-
|
|
43
|
-
def deflater
|
|
44
|
-
Deflater
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def inflater(bytesize)
|
|
48
|
-
Inflater.new(bytesize)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
register_plugin :"compression/brotli", Compression::Brotli
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module HTTPX
|
|
4
|
-
module Plugins
|
|
5
|
-
module Compression
|
|
6
|
-
module Deflate
|
|
7
|
-
class << self
|
|
8
|
-
def load_dependencies(_klass)
|
|
9
|
-
require "stringio"
|
|
10
|
-
require "zlib"
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def configure(klass)
|
|
14
|
-
klass.plugin(:"compression/gzip")
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def extra_options(options)
|
|
18
|
-
options.merge(encodings: options.encodings.merge("deflate" => self))
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
module Deflater
|
|
23
|
-
module_function
|
|
24
|
-
|
|
25
|
-
def deflate(raw, buffer = "".b, chunk_size: 16_384)
|
|
26
|
-
deflater = Zlib::Deflate.new
|
|
27
|
-
while (chunk = raw.read(chunk_size))
|
|
28
|
-
compressed = deflater.deflate(chunk)
|
|
29
|
-
buffer << compressed
|
|
30
|
-
yield compressed if block_given?
|
|
31
|
-
end
|
|
32
|
-
last = deflater.finish
|
|
33
|
-
buffer << last
|
|
34
|
-
yield last if block_given?
|
|
35
|
-
buffer
|
|
36
|
-
ensure
|
|
37
|
-
deflater.close if deflater
|
|
38
|
-
end
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
module_function
|
|
42
|
-
|
|
43
|
-
def deflater
|
|
44
|
-
Deflater
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def inflater(bytesize)
|
|
48
|
-
GZIP::Inflater.new(bytesize)
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
register_plugin :"compression/deflate", Compression::Deflate
|
|
53
|
-
end
|
|
54
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "forwardable"
|
|
4
|
-
|
|
5
|
-
module HTTPX
|
|
6
|
-
module Plugins
|
|
7
|
-
module Compression
|
|
8
|
-
module GZIP
|
|
9
|
-
class << self
|
|
10
|
-
def load_dependencies(*)
|
|
11
|
-
require "zlib"
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def extra_options(options)
|
|
15
|
-
options.merge(encodings: options.encodings.merge("gzip" => self))
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
class Deflater
|
|
20
|
-
def initialize
|
|
21
|
-
@compressed_chunk = "".b
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def deflate(raw, buffer = "".b, chunk_size: 16_384)
|
|
25
|
-
gzip = Zlib::GzipWriter.new(self)
|
|
26
|
-
|
|
27
|
-
begin
|
|
28
|
-
while (chunk = raw.read(chunk_size))
|
|
29
|
-
gzip.write(chunk)
|
|
30
|
-
gzip.flush
|
|
31
|
-
compressed = compressed_chunk
|
|
32
|
-
buffer << compressed
|
|
33
|
-
yield compressed if block_given?
|
|
34
|
-
end
|
|
35
|
-
ensure
|
|
36
|
-
gzip.close
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
return unless (compressed = compressed_chunk)
|
|
40
|
-
|
|
41
|
-
buffer << compressed
|
|
42
|
-
yield compressed if block_given?
|
|
43
|
-
buffer
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
private
|
|
47
|
-
|
|
48
|
-
def write(chunk)
|
|
49
|
-
@compressed_chunk << chunk
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
def compressed_chunk
|
|
53
|
-
@compressed_chunk.dup
|
|
54
|
-
ensure
|
|
55
|
-
@compressed_chunk.clear
|
|
56
|
-
end
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
class Inflater
|
|
60
|
-
def initialize(bytesize)
|
|
61
|
-
@inflater = Zlib::Inflate.new(Zlib::MAX_WBITS + 32)
|
|
62
|
-
@bytesize = bytesize
|
|
63
|
-
@buffer = nil
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def inflate(chunk)
|
|
67
|
-
buffer = @inflater.inflate(chunk)
|
|
68
|
-
@bytesize -= chunk.bytesize
|
|
69
|
-
if @bytesize <= 0
|
|
70
|
-
buffer << @inflater.finish
|
|
71
|
-
@inflater.close
|
|
72
|
-
end
|
|
73
|
-
buffer
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
module_function
|
|
78
|
-
|
|
79
|
-
def deflater
|
|
80
|
-
Deflater.new
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
def inflater(bytesize)
|
|
84
|
-
Inflater.new(bytesize)
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
register_plugin :"compression/gzip", Compression::GZIP
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
module HTTPX
|
|
4
|
-
module Plugins
|
|
5
|
-
#
|
|
6
|
-
# This plugin adds compression support. Namely it:
|
|
7
|
-
#
|
|
8
|
-
# * Compresses the request body when passed a supported "Content-Encoding" mime-type;
|
|
9
|
-
# * Decompresses the response body from a supported "Content-Encoding" mime-type;
|
|
10
|
-
#
|
|
11
|
-
# It supports both *gzip* and *deflate*.
|
|
12
|
-
#
|
|
13
|
-
# https://gitlab.com/os85/httpx/wikis/Compression
|
|
14
|
-
#
|
|
15
|
-
module Compression
|
|
16
|
-
class << self
|
|
17
|
-
def configure(klass)
|
|
18
|
-
klass.plugin(:"compression/gzip")
|
|
19
|
-
klass.plugin(:"compression/deflate")
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
def extra_options(options)
|
|
23
|
-
options.merge(encodings: {})
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
module OptionsMethods
|
|
28
|
-
def option_compression_threshold_size(value)
|
|
29
|
-
bytes = Integer(value)
|
|
30
|
-
raise TypeError, ":compression_threshold_size must be positive" unless bytes.positive?
|
|
31
|
-
|
|
32
|
-
bytes
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def option_encodings(value)
|
|
36
|
-
raise TypeError, ":encodings must be an Hash" unless value.is_a?(Hash)
|
|
37
|
-
|
|
38
|
-
value
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
module RequestMethods
|
|
43
|
-
def initialize(*)
|
|
44
|
-
super
|
|
45
|
-
# forego compression in the Range cases
|
|
46
|
-
if @headers.key?("range")
|
|
47
|
-
@headers.delete("accept-encoding")
|
|
48
|
-
else
|
|
49
|
-
@headers["accept-encoding"] ||= @options.encodings.keys
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
module RequestBodyMethods
|
|
55
|
-
def initialize(*, options)
|
|
56
|
-
super
|
|
57
|
-
return if @body.nil?
|
|
58
|
-
|
|
59
|
-
threshold = options.compression_threshold_size
|
|
60
|
-
return if threshold && !unbounded_body? && @body.bytesize < threshold
|
|
61
|
-
|
|
62
|
-
@headers.get("content-encoding").each do |encoding|
|
|
63
|
-
next if encoding == "identity"
|
|
64
|
-
|
|
65
|
-
next unless options.encodings.key?(encoding)
|
|
66
|
-
|
|
67
|
-
@body = Encoder.new(@body, options.encodings[encoding].deflater)
|
|
68
|
-
end
|
|
69
|
-
@headers["content-length"] = @body.bytesize unless unbounded_body?
|
|
70
|
-
end
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
module ResponseBodyMethods
|
|
74
|
-
using ArrayExtensions::FilterMap
|
|
75
|
-
|
|
76
|
-
attr_reader :encodings
|
|
77
|
-
|
|
78
|
-
def initialize(*)
|
|
79
|
-
@encodings = []
|
|
80
|
-
|
|
81
|
-
super
|
|
82
|
-
|
|
83
|
-
return unless @headers.key?("content-encoding")
|
|
84
|
-
|
|
85
|
-
# remove encodings that we are able to decode
|
|
86
|
-
@headers["content-encoding"] = @headers.get("content-encoding") - @encodings
|
|
87
|
-
|
|
88
|
-
compressed_length = if @headers.key?("content-length")
|
|
89
|
-
@headers["content-length"].to_i
|
|
90
|
-
else
|
|
91
|
-
Float::INFINITY
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
@_inflaters = @headers.get("content-encoding").filter_map do |encoding|
|
|
95
|
-
next if encoding == "identity"
|
|
96
|
-
|
|
97
|
-
next unless @options.encodings.key?(encoding)
|
|
98
|
-
|
|
99
|
-
inflater = @options.encodings[encoding].inflater(compressed_length)
|
|
100
|
-
# do not uncompress if there is no decoder available. In fact, we can't reliably
|
|
101
|
-
# continue decompressing beyond that, so ignore.
|
|
102
|
-
break unless inflater
|
|
103
|
-
|
|
104
|
-
@encodings << encoding
|
|
105
|
-
inflater
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
# this can happen if the only declared encoding is "identity"
|
|
109
|
-
remove_instance_variable(:@_inflaters) if @_inflaters.empty?
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
def write(chunk)
|
|
113
|
-
return super unless defined?(@_inflaters) && !chunk.empty?
|
|
114
|
-
|
|
115
|
-
chunk = decompress(chunk)
|
|
116
|
-
super(chunk)
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
private
|
|
120
|
-
|
|
121
|
-
def decompress(buffer)
|
|
122
|
-
@_inflaters.reverse_each do |inflater|
|
|
123
|
-
buffer = inflater.inflate(buffer)
|
|
124
|
-
end
|
|
125
|
-
buffer
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
class Encoder
|
|
130
|
-
attr_reader :content_type
|
|
131
|
-
|
|
132
|
-
def initialize(body, deflater)
|
|
133
|
-
@content_type = body.content_type
|
|
134
|
-
@body = body.respond_to?(:read) ? body : StringIO.new(body.to_s)
|
|
135
|
-
@buffer = StringIO.new("".b, File::RDWR)
|
|
136
|
-
@deflater = deflater
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
def each(&blk)
|
|
140
|
-
return enum_for(__method__) unless blk
|
|
141
|
-
|
|
142
|
-
return deflate(&blk) if @buffer.size.zero? # rubocop:disable Style/ZeroLengthPredicate
|
|
143
|
-
|
|
144
|
-
@buffer.rewind
|
|
145
|
-
@buffer.each(&blk)
|
|
146
|
-
end
|
|
147
|
-
|
|
148
|
-
def bytesize
|
|
149
|
-
deflate
|
|
150
|
-
@buffer.size
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
private
|
|
154
|
-
|
|
155
|
-
def deflate(&blk)
|
|
156
|
-
return unless @buffer.size.zero? # rubocop:disable Style/ZeroLengthPredicate
|
|
157
|
-
|
|
158
|
-
@body.rewind
|
|
159
|
-
@deflater.deflate(@body, @buffer, chunk_size: 16_384, &blk)
|
|
160
|
-
end
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
register_plugin :compression, Compression
|
|
164
|
-
end
|
|
165
|
-
end
|