httpx 0.9.0 → 0.10.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 +48 -0
- data/README.md +2 -0
- data/doc/release_notes/0_10_0.md +66 -0
- data/lib/httpx.rb +2 -0
- data/lib/httpx/adapters/faraday.rb +1 -1
- data/lib/httpx/chainable.rb +2 -2
- data/lib/httpx/connection.rb +3 -9
- data/lib/httpx/connection/http1.rb +1 -1
- data/lib/httpx/domain_name.rb +440 -0
- data/lib/httpx/errors.rb +1 -0
- data/lib/httpx/extensions.rb +21 -1
- data/lib/httpx/io/ssl.rb +0 -1
- data/lib/httpx/io/tcp.rb +6 -5
- data/lib/httpx/io/udp.rb +4 -1
- data/lib/httpx/options.rb +2 -0
- data/lib/httpx/parser/http1.rb +14 -17
- data/lib/httpx/plugins/compression.rb +28 -63
- data/lib/httpx/plugins/compression/brotli.rb +10 -14
- data/lib/httpx/plugins/compression/deflate.rb +7 -6
- data/lib/httpx/plugins/compression/gzip.rb +23 -5
- data/lib/httpx/plugins/cookies.rb +21 -60
- data/lib/httpx/plugins/cookies/cookie.rb +173 -0
- data/lib/httpx/plugins/cookies/jar.rb +74 -0
- data/lib/httpx/plugins/cookies/set_cookie_parser.rb +142 -0
- data/lib/httpx/plugins/expect.rb +3 -5
- data/lib/httpx/plugins/follow_redirects.rb +20 -2
- data/lib/httpx/plugins/h2c.rb +1 -1
- data/lib/httpx/plugins/multipart.rb +0 -8
- data/lib/httpx/plugins/persistent.rb +6 -1
- data/lib/httpx/plugins/proxy/socks4.rb +3 -1
- data/lib/httpx/plugins/rate_limiter.rb +51 -0
- data/lib/httpx/plugins/retries.rb +3 -2
- data/lib/httpx/plugins/stream.rb +109 -13
- data/lib/httpx/pool.rb +6 -6
- data/lib/httpx/request.rb +7 -19
- data/lib/httpx/resolver/https.rb +7 -2
- data/lib/httpx/resolver/native.rb +7 -3
- data/lib/httpx/response.rb +16 -23
- data/lib/httpx/selector.rb +2 -4
- data/lib/httpx/session.rb +17 -11
- data/lib/httpx/transcoder/chunker.rb +0 -2
- data/lib/httpx/transcoder/form.rb +0 -6
- data/lib/httpx/transcoder/json.rb +0 -4
- data/lib/httpx/utils.rb +45 -0
- data/lib/httpx/version.rb +1 -1
- data/sig/buffer.rbs +24 -0
- data/sig/callbacks.rbs +14 -0
- data/sig/chainable.rbs +37 -0
- data/sig/connection.rbs +2 -0
- data/sig/connection/http2.rbs +4 -0
- data/sig/domain_name.rbs +17 -0
- data/sig/errors.rbs +3 -0
- data/sig/headers.rbs +42 -0
- data/sig/httpx.rbs +14 -0
- data/sig/loggable.rbs +11 -0
- data/sig/missing.rbs +12 -0
- data/sig/options.rbs +118 -0
- data/sig/parser/http1.rbs +50 -0
- data/sig/plugins/authentication.rbs +11 -0
- data/sig/plugins/basic_authentication.rbs +13 -0
- data/sig/plugins/compression.rbs +55 -0
- data/sig/plugins/compression/brotli.rbs +21 -0
- data/sig/plugins/compression/deflate.rbs +17 -0
- data/sig/plugins/compression/gzip.rbs +29 -0
- data/sig/plugins/cookies.rbs +26 -0
- data/sig/plugins/cookies/cookie.rbs +50 -0
- data/sig/plugins/cookies/jar.rbs +27 -0
- data/sig/plugins/digest_authentication.rbs +33 -0
- data/sig/plugins/expect.rbs +19 -0
- data/sig/plugins/follow_redirects.rbs +37 -0
- data/sig/plugins/h2c.rbs +26 -0
- data/sig/plugins/multipart.rbs +19 -0
- data/sig/plugins/persistent.rbs +17 -0
- data/sig/plugins/proxy.rbs +47 -0
- data/sig/plugins/proxy/http.rbs +14 -0
- data/sig/plugins/proxy/socks4.rbs +33 -0
- data/sig/plugins/proxy/socks5.rbs +36 -0
- data/sig/plugins/proxy/ssh.rbs +18 -0
- data/sig/plugins/push_promise.rbs +22 -0
- data/sig/plugins/rate_limiter.rbs +11 -0
- data/sig/plugins/retries.rbs +48 -0
- data/sig/plugins/stream.rbs +39 -0
- data/sig/pool.rbs +2 -0
- data/sig/registry.rbs +9 -0
- data/sig/request.rbs +61 -0
- data/sig/response.rbs +87 -0
- data/sig/session.rbs +49 -0
- data/sig/test.rbs +9 -0
- data/sig/timeout.rbs +29 -0
- data/sig/transcoder.rbs +16 -0
- data/sig/transcoder/body.rbs +18 -0
- data/sig/transcoder/chunker.rbs +32 -0
- data/sig/transcoder/form.rbs +16 -0
- data/sig/transcoder/json.rbs +14 -0
- 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
|
data/sig/plugins/h2c.rbs
ADDED
@@ -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,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
|
data/sig/pool.rbs
ADDED