httpx 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +48 -0
  3. data/README.md +2 -0
  4. data/doc/release_notes/0_10_0.md +66 -0
  5. data/lib/httpx.rb +2 -0
  6. data/lib/httpx/adapters/faraday.rb +1 -1
  7. data/lib/httpx/chainable.rb +2 -2
  8. data/lib/httpx/connection.rb +3 -9
  9. data/lib/httpx/connection/http1.rb +1 -1
  10. data/lib/httpx/domain_name.rb +440 -0
  11. data/lib/httpx/errors.rb +1 -0
  12. data/lib/httpx/extensions.rb +21 -1
  13. data/lib/httpx/io/ssl.rb +0 -1
  14. data/lib/httpx/io/tcp.rb +6 -5
  15. data/lib/httpx/io/udp.rb +4 -1
  16. data/lib/httpx/options.rb +2 -0
  17. data/lib/httpx/parser/http1.rb +14 -17
  18. data/lib/httpx/plugins/compression.rb +28 -63
  19. data/lib/httpx/plugins/compression/brotli.rb +10 -14
  20. data/lib/httpx/plugins/compression/deflate.rb +7 -6
  21. data/lib/httpx/plugins/compression/gzip.rb +23 -5
  22. data/lib/httpx/plugins/cookies.rb +21 -60
  23. data/lib/httpx/plugins/cookies/cookie.rb +173 -0
  24. data/lib/httpx/plugins/cookies/jar.rb +74 -0
  25. data/lib/httpx/plugins/cookies/set_cookie_parser.rb +142 -0
  26. data/lib/httpx/plugins/expect.rb +3 -5
  27. data/lib/httpx/plugins/follow_redirects.rb +20 -2
  28. data/lib/httpx/plugins/h2c.rb +1 -1
  29. data/lib/httpx/plugins/multipart.rb +0 -8
  30. data/lib/httpx/plugins/persistent.rb +6 -1
  31. data/lib/httpx/plugins/proxy/socks4.rb +3 -1
  32. data/lib/httpx/plugins/rate_limiter.rb +51 -0
  33. data/lib/httpx/plugins/retries.rb +3 -2
  34. data/lib/httpx/plugins/stream.rb +109 -13
  35. data/lib/httpx/pool.rb +6 -6
  36. data/lib/httpx/request.rb +7 -19
  37. data/lib/httpx/resolver/https.rb +7 -2
  38. data/lib/httpx/resolver/native.rb +7 -3
  39. data/lib/httpx/response.rb +16 -23
  40. data/lib/httpx/selector.rb +2 -4
  41. data/lib/httpx/session.rb +17 -11
  42. data/lib/httpx/transcoder/chunker.rb +0 -2
  43. data/lib/httpx/transcoder/form.rb +0 -6
  44. data/lib/httpx/transcoder/json.rb +0 -4
  45. data/lib/httpx/utils.rb +45 -0
  46. data/lib/httpx/version.rb +1 -1
  47. data/sig/buffer.rbs +24 -0
  48. data/sig/callbacks.rbs +14 -0
  49. data/sig/chainable.rbs +37 -0
  50. data/sig/connection.rbs +2 -0
  51. data/sig/connection/http2.rbs +4 -0
  52. data/sig/domain_name.rbs +17 -0
  53. data/sig/errors.rbs +3 -0
  54. data/sig/headers.rbs +42 -0
  55. data/sig/httpx.rbs +14 -0
  56. data/sig/loggable.rbs +11 -0
  57. data/sig/missing.rbs +12 -0
  58. data/sig/options.rbs +118 -0
  59. data/sig/parser/http1.rbs +50 -0
  60. data/sig/plugins/authentication.rbs +11 -0
  61. data/sig/plugins/basic_authentication.rbs +13 -0
  62. data/sig/plugins/compression.rbs +55 -0
  63. data/sig/plugins/compression/brotli.rbs +21 -0
  64. data/sig/plugins/compression/deflate.rbs +17 -0
  65. data/sig/plugins/compression/gzip.rbs +29 -0
  66. data/sig/plugins/cookies.rbs +26 -0
  67. data/sig/plugins/cookies/cookie.rbs +50 -0
  68. data/sig/plugins/cookies/jar.rbs +27 -0
  69. data/sig/plugins/digest_authentication.rbs +33 -0
  70. data/sig/plugins/expect.rbs +19 -0
  71. data/sig/plugins/follow_redirects.rbs +37 -0
  72. data/sig/plugins/h2c.rbs +26 -0
  73. data/sig/plugins/multipart.rbs +19 -0
  74. data/sig/plugins/persistent.rbs +17 -0
  75. data/sig/plugins/proxy.rbs +47 -0
  76. data/sig/plugins/proxy/http.rbs +14 -0
  77. data/sig/plugins/proxy/socks4.rbs +33 -0
  78. data/sig/plugins/proxy/socks5.rbs +36 -0
  79. data/sig/plugins/proxy/ssh.rbs +18 -0
  80. data/sig/plugins/push_promise.rbs +22 -0
  81. data/sig/plugins/rate_limiter.rbs +11 -0
  82. data/sig/plugins/retries.rbs +48 -0
  83. data/sig/plugins/stream.rbs +39 -0
  84. data/sig/pool.rbs +2 -0
  85. data/sig/registry.rbs +9 -0
  86. data/sig/request.rbs +61 -0
  87. data/sig/response.rbs +87 -0
  88. data/sig/session.rbs +49 -0
  89. data/sig/test.rbs +9 -0
  90. data/sig/timeout.rbs +29 -0
  91. data/sig/transcoder.rbs +16 -0
  92. data/sig/transcoder/body.rbs +18 -0
  93. data/sig/transcoder/chunker.rbs +32 -0
  94. data/sig/transcoder/form.rbs +16 -0
  95. data/sig/transcoder/json.rbs +14 -0
  96. metadata +60 -17
@@ -0,0 +1,33 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module DigestAuthentication
4
+ DigestError: singleton(Error)
5
+
6
+ interface _DigestOptions
7
+ def digest: () -> Digest?
8
+ def digest=: (Digest) -> Digest
9
+ def with_digest: (Digest) -> instance
10
+ end
11
+
12
+ def self.extra_options: (Options) -> (Options & _DigestOptions)
13
+
14
+ def self.load_dependencies: (*untyped) -> void
15
+
16
+ module InstanceMethods
17
+ def digest_authentication: (string user, string password) -> instance
18
+ end
19
+
20
+ class Digest
21
+ def generate_header: (Request, Response, ?bool?) -> String
22
+
23
+ private
24
+
25
+ def initialize: (string user, string password) -> untyped
26
+ def make_cnonce: () -> String
27
+ def next_nonce: () -> Integer
28
+ end
29
+ end
30
+
31
+ type sessionDigestAuthentication = Plugins::sessionAuthentication & Plugins::Authentication::InstanceMethods
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Expect
4
+ EXPECT_TIMEOUT: Integer
5
+
6
+ interface _ExpectOptions
7
+ def expect_timeout: () -> Integer?
8
+ def expect_timeout=: (int) -> Integer
9
+ def with_expect_timeout: (int) -> instance
10
+
11
+ def expect_threshold_size: () -> Integer?
12
+ def expect_threshold_size=: (int) -> Integer
13
+ def with_expect_threshold_size: (int) -> instance
14
+ end
15
+
16
+ def self.extra_options: (Options) -> (Options & _ExpectOptions)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,37 @@
1
+ module HTTPX
2
+ InsecureRedirectError: singleton(Error)
3
+
4
+ module Plugins
5
+ module FollowRedirects
6
+ MAX_REDIRECTS: Integer
7
+ REDIRECT_STATUS: Range[Integer]
8
+
9
+ interface _FollowRedirectsOptions
10
+ def max_redirects: () -> Integer?
11
+ def max_redirects=: (int) -> Integer
12
+ def with_max_redirects: (int) -> instance
13
+
14
+ def follow_insecure_redirects: () -> bool?
15
+ def follow_insecure_redirects=: (bool) -> bool
16
+ def with_follow_insecure_redirects: (bool) -> instance
17
+ end
18
+
19
+ def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
20
+
21
+ module InstanceMethods
22
+ def max_redirects: (_ToI) -> instance
23
+
24
+ def build_redirect_request: (Request, Response, Options) -> Request
25
+ def __get_location_from_response: (Response) -> (URI::HTTP | URI::HTTPS)
26
+ end
27
+
28
+ module RequestMethods
29
+ def redirect_request: () -> Request
30
+ def redirect_request=: (Request) -> void
31
+ def max_redirects: () -> Integer
32
+ end
33
+ end
34
+
35
+ type sessionFollowRedirects = Session & Plugins::Authentication::InstanceMethods
36
+ end
37
+ end
@@ -0,0 +1,26 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module H2C
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+
6
+ module InstanceMethods
7
+ VALID_H2C_METHODS: Array[Symbol]
8
+
9
+ private
10
+
11
+ def valid_h2c_upgrade_request: (Request) -> bool
12
+ def valid_h2c_upgrade?: (Request, Response, Options) -> bool
13
+ end
14
+
15
+ class H2CParser < Connection::HTTP2
16
+ def upgrade: (Request, Response) -> void
17
+ end
18
+
19
+ module ConnectionMethods
20
+ def upgrade: (Request, Response) -> void
21
+ end
22
+ end
23
+
24
+ type sessionH2C = Session & Plugins::H2C::InstanceMethods
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Multipart
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+ def self.configure: (*untyped) -> void
6
+ def self?.encode: (untyped) -> Encoder
7
+
8
+ class Encoder
9
+ include Transcoder::_Encoder
10
+ include _ToS
11
+ include _Reader
12
+
13
+ private
14
+
15
+ def initalize: (Hash[Symbol | string, HTTP::FormData::Part | string] multipart_data) -> untyped
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Persistent
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+
6
+ interface _PersistentOptions
7
+ def persistent: () -> bool?
8
+ def persistent=: (bool) -> bool
9
+ def with_persistent: (bool) -> instance
10
+ end
11
+
12
+ def self.extra_options: (Options) -> (Options & _PersistentOptions)
13
+ end
14
+
15
+ type sessionPersistent = sessionFollowRedirects
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ module HTTPX
2
+ HTTPProxyError: singleton(Error)
3
+
4
+ module Plugins
5
+ module Proxy
6
+ Error: singleton(HTTPProxyError)
7
+ PROXY_ERRORS: Array[singleton(StandardError)]
8
+
9
+ class Parameters
10
+ attr_reader uri: URI::Generic
11
+ attr_reader username: string?
12
+ attr_reader password: string?
13
+
14
+ def authenticated?: () -> boolish
15
+ def token_authentication: () -> String?
16
+
17
+ def ==: (untyped) -> bool
18
+
19
+ private
20
+
21
+ def initialize: (uri: uri, ?username: string, ?password: string) -> untyped
22
+ end
23
+
24
+ # def self.configure: (singleton(Session)) -> void
25
+
26
+ type proxyParam = Parameters | Hash
27
+
28
+ interface _ProxyOptions
29
+ def proxy: () -> proxyParam?
30
+ def proxy=: (Parameters | _ToHash) -> proxyParam
31
+ def with_proxy: (Parameters | _ToHash) -> instance
32
+ end
33
+
34
+ def self.extra_options: (Options) -> (Options & _ProxyOptions)
35
+
36
+ module InstanceMethods
37
+ private
38
+
39
+ def proxy_uris: (uri, Options & _ProxyOptions) -> { uri: (URI | string), username: string, password: string }
40
+ | (uri, Options & _ProxyOptions) -> { uri: (URI | string) }
41
+ | (uri, Options & _ProxyOptions) -> nil
42
+ end
43
+ end
44
+
45
+ type sessionProxy = Session & Plugins::Proxy::InstanceMethods
46
+ end
47
+ end
@@ -0,0 +1,14 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Proxy
4
+ module HTTP
5
+
6
+ module ConnectionMethods
7
+ def __http_proxy_connect: () -> void
8
+ def __http_on_connect: (top, Response) -> void
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,33 @@
1
+ module HTTPX
2
+ Socks4Error: singleton(Error)
3
+
4
+ module Plugins
5
+ module Proxy
6
+ module Socks4
7
+
8
+ module ConnectionMethods
9
+ def __socks4_proxy_connect: () -> void
10
+ def __socks4_on_packet: (String packet) -> void
11
+ def on_socks4_error: (string) -> void
12
+ end
13
+
14
+ class SocksParser
15
+ include Callbacks
16
+
17
+ def close: () -> void
18
+ def consume: (*untyped) -> void
19
+ def empty: () -> bool
20
+ def <<: (string) -> void
21
+
22
+ private
23
+
24
+ def initialize: (Buffer buffer, Options) -> untyped
25
+ end
26
+
27
+ module Packet
28
+ def self?.connect: (Parameters, uri) -> String
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ module HTTPX
2
+ Socks5Error: singleton(Error)
3
+
4
+ module Plugins
5
+ module Proxy
6
+ module Socks5
7
+
8
+ module ConnectionMethods
9
+ def __socks5_proxy_connect: () -> void
10
+ def __socks5_on_packet: (String packet) -> void
11
+ def __socks5_check_version: (int) -> void
12
+ def __on_socks5_error: (string) -> void
13
+ end
14
+
15
+ class SocksParser
16
+ include Callbacks
17
+
18
+ def close: () -> void
19
+ def consume: (*untyped) -> void
20
+ def empty: () -> bool
21
+ def <<: (string) -> void
22
+
23
+ private
24
+
25
+ def initialize: (Buffer buffer, Options) -> untyped
26
+ end
27
+
28
+ module Packet
29
+ def self?.negotiate: (Parameters) -> String
30
+ def self?.authenticate: (Parameters) -> String
31
+ def self?.connect: (uri) -> String
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Proxy
4
+ module SSH
5
+ # def self.load_dependencies: (singleton(Session)) -> void
6
+
7
+ module InstancenMethods
8
+ private
9
+
10
+ def build_gateway_socket: (int, URI::HTTPS | URI::HTTPS, Options) -> IO
11
+ end
12
+ end
13
+ end
14
+
15
+
16
+ type sessionSSHProxy = Plugins::Proxy::InstanceMethods & Plugins::Proxy::SSH::InstanceMethods
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module PushPromise
4
+ def self.extra_options: (Options) -> Options
5
+
6
+ module ResponseMethods
7
+ def pushed?: () -> boolish
8
+ def mark_as_pushed!: () -> void
9
+ end
10
+
11
+ module InstanceMethods
12
+ private
13
+
14
+ def promise_headers: () -> Hash[HTTP2Next::Stream, Request]
15
+ def __on_promise_request: (Connection::HTTP2, HTTP2Next::Stream, headers_input) -> void
16
+ def __on_promise_response: (Connection::HTTP2, HTTP2Next::Stream, headers_input) -> void
17
+ end
18
+ end
19
+
20
+ type sessionPushPromise = Session & PushPromise::InstanceMethods
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module RateLimiter
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+
6
+ def self.retry_on_rate_limited_response: (_Response) -> bool
7
+
8
+ def self.retry_after_rate_limit: (untyped, _Response) -> Numeric?
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,48 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Retries
4
+ MAX_RETRIES: Integer
5
+ IDEMPOTENT_METHODS: Array[verb]
6
+ RETRYABLE_ERRORS: Array[singleton(StandardError)]
7
+
8
+ interface _RetryCallback
9
+ def call: (response) -> bool?
10
+ end
11
+
12
+ interface _RetriesOptions
13
+ def retry_after: () -> Numeric?
14
+ def retry_after=: (Numeric) -> Numeric
15
+ def with_retry_after: (Numeric) -> instance
16
+
17
+ def max_retries: () -> Integer?
18
+ def max_retries=: (int) -> Integer
19
+ def with_max_retries: (int) -> instance
20
+
21
+ def retry_change_requests: () -> bool?
22
+ def retry_change_requests=: (bool) -> bool
23
+ def with_retry_change_requests: (bool) -> instance
24
+
25
+ def retry_on: () -> _RetryCallback?
26
+ def retry_on=: (_RetryCallback) -> _RetryCallback
27
+ def with_retry_on: (_RetryCallback) -> instance
28
+ end
29
+
30
+ def self.extra_options: (Options) -> (Options & _RetriesOptions)
31
+
32
+ module InstanceMethods
33
+ def max_retries: (int) -> instance
34
+
35
+ private
36
+
37
+ def __repeatable_request?: (Request, Options) -> boolish
38
+ def __retryable_error?: (_Exception) -> bool
39
+ end
40
+
41
+ module RequestMethods
42
+ def retries: () -> Integer
43
+ end
44
+ end
45
+
46
+ type sessionRetries = Session & Plugins::Retries::InstanceMethods
47
+ end
48
+ end
@@ -0,0 +1,39 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Stream
4
+ module InstanceMethods
5
+ private
6
+
7
+ def request: (*Request, ?stream: bool, **untyped?) -> (response | Array[response] | StreamResponse)
8
+ | (*untyped, ?stream: bool, **untyped?) -> (response | Array[response] | StreamResponse)
9
+ end
10
+
11
+ module RequestMethods
12
+ attr_accessor stream: StreamResponse?
13
+ end
14
+
15
+ module ResponseMethods
16
+ def stream: () -> StreamResponse?
17
+ end
18
+
19
+ class StreamResponse
20
+ include _ToS
21
+
22
+ def each: () { (String) -> void } -> void
23
+ | () -> Enumerable[String]
24
+
25
+ def each_line: () { (String) -> void } -> void
26
+ | () -> Enumerable[String]
27
+
28
+ def on_chunk: (string) -> void
29
+
30
+ private
31
+
32
+ def response: () -> response
33
+ def initialize: (Request, Session) -> untyped
34
+ end
35
+ end
36
+
37
+ type sessionStream = Session & Plugins::Stream::InstanceMethods
38
+ end
39
+ end
@@ -0,0 +1,2 @@
1
+ class HTTPX::Pool
2
+ end
@@ -0,0 +1,9 @@
1
+ module HTTPX::Registry[T, V]
2
+ # type registrable = Symbol | String | Class
3
+
4
+ def self.registry: (T tag) -> Class
5
+ | () -> Hash[K, V]
6
+ def self.register: (T tag, V handler) -> void
7
+
8
+ def registry: (?T tag) -> V
9
+ end