httpx-patched 1.6.2.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 +7 -0
- data/LICENSE.txt +191 -0
- data/README.md +162 -0
- data/doc/release_notes/0_0_1.md +7 -0
- data/doc/release_notes/0_0_2.md +9 -0
- data/doc/release_notes/0_0_3.md +9 -0
- data/doc/release_notes/0_0_4.md +7 -0
- data/doc/release_notes/0_0_5.md +5 -0
- data/doc/release_notes/0_10_0.md +66 -0
- data/doc/release_notes/0_10_1.md +37 -0
- data/doc/release_notes/0_10_2.md +5 -0
- data/doc/release_notes/0_11_0.md +74 -0
- data/doc/release_notes/0_11_1.md +5 -0
- data/doc/release_notes/0_11_2.md +5 -0
- data/doc/release_notes/0_11_3.md +5 -0
- 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/doc/release_notes/0_14_1.md +7 -0
- data/doc/release_notes/0_14_2.md +6 -0
- data/doc/release_notes/0_14_3.md +5 -0
- data/doc/release_notes/0_14_4.md +5 -0
- data/doc/release_notes/0_14_5.md +11 -0
- data/doc/release_notes/0_15_0.md +53 -0
- data/doc/release_notes/0_15_1.md +8 -0
- data/doc/release_notes/0_15_2.md +9 -0
- data/doc/release_notes/0_15_3.md +5 -0
- data/doc/release_notes/0_15_4.md +5 -0
- data/doc/release_notes/0_16_0.md +93 -0
- data/doc/release_notes/0_16_1.md +5 -0
- data/doc/release_notes/0_17_0.md +49 -0
- data/doc/release_notes/0_18_0.md +69 -0
- data/doc/release_notes/0_18_1.md +12 -0
- data/doc/release_notes/0_18_2.md +10 -0
- data/doc/release_notes/0_18_3.md +7 -0
- data/doc/release_notes/0_18_4.md +14 -0
- data/doc/release_notes/0_18_5.md +10 -0
- data/doc/release_notes/0_18_6.md +5 -0
- data/doc/release_notes/0_18_7.md +5 -0
- data/doc/release_notes/0_19_0.md +39 -0
- data/doc/release_notes/0_19_1.md +5 -0
- data/doc/release_notes/0_19_2.md +7 -0
- data/doc/release_notes/0_19_3.md +6 -0
- data/doc/release_notes/0_19_4.md +14 -0
- data/doc/release_notes/0_19_5.md +13 -0
- data/doc/release_notes/0_19_6.md +5 -0
- data/doc/release_notes/0_19_7.md +5 -0
- data/doc/release_notes/0_19_8.md +5 -0
- data/doc/release_notes/0_1_0.md +9 -0
- data/doc/release_notes/0_20_0.md +36 -0
- data/doc/release_notes/0_20_1.md +5 -0
- data/doc/release_notes/0_20_2.md +7 -0
- data/doc/release_notes/0_20_3.md +6 -0
- data/doc/release_notes/0_20_4.md +17 -0
- data/doc/release_notes/0_20_5.md +3 -0
- data/doc/release_notes/0_21_0.md +96 -0
- data/doc/release_notes/0_21_1.md +12 -0
- data/doc/release_notes/0_22_0.md +13 -0
- data/doc/release_notes/0_22_1.md +11 -0
- data/doc/release_notes/0_22_2.md +5 -0
- data/doc/release_notes/0_22_3.md +55 -0
- data/doc/release_notes/0_22_4.md +6 -0
- data/doc/release_notes/0_22_5.md +6 -0
- data/doc/release_notes/0_23_0.md +42 -0
- data/doc/release_notes/0_23_1.md +5 -0
- data/doc/release_notes/0_23_2.md +5 -0
- data/doc/release_notes/0_23_3.md +6 -0
- data/doc/release_notes/0_23_4.md +5 -0
- data/doc/release_notes/0_24_0.md +48 -0
- data/doc/release_notes/0_24_1.md +12 -0
- data/doc/release_notes/0_24_2.md +12 -0
- data/doc/release_notes/0_24_3.md +12 -0
- data/doc/release_notes/0_24_4.md +18 -0
- data/doc/release_notes/0_24_5.md +6 -0
- data/doc/release_notes/0_24_6.md +5 -0
- data/doc/release_notes/0_24_7.md +10 -0
- data/doc/release_notes/0_2_0.md +5 -0
- data/doc/release_notes/0_2_1.md +16 -0
- data/doc/release_notes/0_3_0.md +12 -0
- data/doc/release_notes/0_3_1.md +6 -0
- data/doc/release_notes/0_4_0.md +51 -0
- data/doc/release_notes/0_4_1.md +3 -0
- data/doc/release_notes/0_5_0.md +15 -0
- data/doc/release_notes/0_5_1.md +14 -0
- data/doc/release_notes/0_6_0.md +5 -0
- data/doc/release_notes/0_6_1.md +6 -0
- data/doc/release_notes/0_6_2.md +6 -0
- data/doc/release_notes/0_6_3.md +13 -0
- data/doc/release_notes/0_6_4.md +21 -0
- data/doc/release_notes/0_6_5.md +22 -0
- data/doc/release_notes/0_6_6.md +19 -0
- data/doc/release_notes/0_6_7.md +5 -0
- data/doc/release_notes/0_7_0.md +46 -0
- data/doc/release_notes/0_8_0.md +27 -0
- data/doc/release_notes/0_8_1.md +8 -0
- data/doc/release_notes/0_8_2.md +7 -0
- data/doc/release_notes/0_9_0.md +38 -0
- data/doc/release_notes/1_0_0.md +60 -0
- data/doc/release_notes/1_0_1.md +5 -0
- data/doc/release_notes/1_0_2.md +7 -0
- data/doc/release_notes/1_1_0.md +32 -0
- data/doc/release_notes/1_1_1.md +17 -0
- data/doc/release_notes/1_1_2.md +12 -0
- data/doc/release_notes/1_1_3.md +18 -0
- data/doc/release_notes/1_1_4.md +6 -0
- data/doc/release_notes/1_1_5.md +12 -0
- data/doc/release_notes/1_2_0.md +49 -0
- data/doc/release_notes/1_2_1.md +6 -0
- data/doc/release_notes/1_2_2.md +10 -0
- data/doc/release_notes/1_2_3.md +16 -0
- data/doc/release_notes/1_2_4.md +8 -0
- data/doc/release_notes/1_2_5.md +7 -0
- data/doc/release_notes/1_2_6.md +13 -0
- data/doc/release_notes/1_3_0.md +18 -0
- data/doc/release_notes/1_3_1.md +17 -0
- data/doc/release_notes/1_3_2.md +6 -0
- data/doc/release_notes/1_3_3.md +5 -0
- data/doc/release_notes/1_3_4.md +6 -0
- data/doc/release_notes/1_4_0.md +43 -0
- data/doc/release_notes/1_4_1.md +19 -0
- data/doc/release_notes/1_4_2.md +20 -0
- data/doc/release_notes/1_4_3.md +11 -0
- data/doc/release_notes/1_4_4.md +14 -0
- data/doc/release_notes/1_5_0.md +126 -0
- data/doc/release_notes/1_5_1.md +6 -0
- data/doc/release_notes/1_6_0.md +50 -0
- data/doc/release_notes/1_6_1.md +17 -0
- data/doc/release_notes/1_6_2.md +11 -0
- data/lib/httpx/adapters/datadog.rb +359 -0
- data/lib/httpx/adapters/faraday.rb +303 -0
- data/lib/httpx/adapters/sentry.rb +121 -0
- data/lib/httpx/adapters/webmock.rb +175 -0
- data/lib/httpx/altsvc.rb +163 -0
- data/lib/httpx/base64.rb +27 -0
- data/lib/httpx/buffer.rb +61 -0
- data/lib/httpx/callbacks.rb +35 -0
- data/lib/httpx/chainable.rb +106 -0
- data/lib/httpx/connection/http1.rb +399 -0
- data/lib/httpx/connection/http2.rb +468 -0
- data/lib/httpx/connection.rb +954 -0
- data/lib/httpx/domain_name.rb +145 -0
- data/lib/httpx/errors.rb +111 -0
- data/lib/httpx/extensions.rb +59 -0
- data/lib/httpx/headers.rb +176 -0
- data/lib/httpx/io/ssl.rb +163 -0
- data/lib/httpx/io/tcp.rb +239 -0
- data/lib/httpx/io/udp.rb +62 -0
- data/lib/httpx/io/unix.rb +71 -0
- data/lib/httpx/io.rb +11 -0
- data/lib/httpx/loggable.rb +56 -0
- data/lib/httpx/options.rb +463 -0
- data/lib/httpx/parser/http1.rb +186 -0
- data/lib/httpx/plugins/auth/basic.rb +20 -0
- data/lib/httpx/plugins/auth/digest.rb +102 -0
- data/lib/httpx/plugins/auth/ntlm.rb +35 -0
- data/lib/httpx/plugins/auth/socks5.rb +22 -0
- data/lib/httpx/plugins/auth.rb +25 -0
- data/lib/httpx/plugins/aws_sdk_authentication.rb +111 -0
- data/lib/httpx/plugins/aws_sigv4.rb +239 -0
- data/lib/httpx/plugins/basic_auth.rb +29 -0
- data/lib/httpx/plugins/brotli.rb +50 -0
- data/lib/httpx/plugins/callbacks.rb +127 -0
- data/lib/httpx/plugins/circuit_breaker/circuit.rb +100 -0
- data/lib/httpx/plugins/circuit_breaker/circuit_store.rb +53 -0
- data/lib/httpx/plugins/circuit_breaker.rb +147 -0
- data/lib/httpx/plugins/content_digest.rb +204 -0
- data/lib/httpx/plugins/cookies/cookie.rb +174 -0
- data/lib/httpx/plugins/cookies/jar.rb +95 -0
- data/lib/httpx/plugins/cookies/set_cookie_parser.rb +143 -0
- data/lib/httpx/plugins/cookies.rb +107 -0
- data/lib/httpx/plugins/digest_auth.rb +67 -0
- data/lib/httpx/plugins/expect.rb +120 -0
- data/lib/httpx/plugins/fiber_concurrency.rb +195 -0
- data/lib/httpx/plugins/follow_redirects.rb +233 -0
- data/lib/httpx/plugins/grpc/call.rb +63 -0
- data/lib/httpx/plugins/grpc/grpc_encoding.rb +90 -0
- data/lib/httpx/plugins/grpc/message.rb +55 -0
- data/lib/httpx/plugins/grpc.rb +282 -0
- data/lib/httpx/plugins/h2c.rb +127 -0
- data/lib/httpx/plugins/internal_telemetry.rb +107 -0
- data/lib/httpx/plugins/ntlm_auth.rb +62 -0
- data/lib/httpx/plugins/oauth.rb +183 -0
- data/lib/httpx/plugins/persistent.rb +82 -0
- data/lib/httpx/plugins/proxy/http.rb +184 -0
- data/lib/httpx/plugins/proxy/socks4.rb +135 -0
- data/lib/httpx/plugins/proxy/socks5.rb +194 -0
- data/lib/httpx/plugins/proxy/ssh.rb +94 -0
- data/lib/httpx/plugins/proxy.rb +349 -0
- data/lib/httpx/plugins/push_promise.rb +81 -0
- data/lib/httpx/plugins/query.rb +35 -0
- data/lib/httpx/plugins/rate_limiter.rb +55 -0
- data/lib/httpx/plugins/response_cache/file_store.rb +140 -0
- data/lib/httpx/plugins/response_cache/store.rb +33 -0
- data/lib/httpx/plugins/response_cache.rb +333 -0
- data/lib/httpx/plugins/retries.rb +230 -0
- data/lib/httpx/plugins/ssrf_filter.rb +145 -0
- data/lib/httpx/plugins/stream.rb +183 -0
- data/lib/httpx/plugins/stream_bidi.rb +315 -0
- data/lib/httpx/plugins/upgrade/h2.rb +64 -0
- data/lib/httpx/plugins/upgrade.rb +86 -0
- data/lib/httpx/plugins/webdav.rb +86 -0
- data/lib/httpx/plugins/xml.rb +76 -0
- data/lib/httpx/pmatch_extensions.rb +33 -0
- data/lib/httpx/pool.rb +190 -0
- data/lib/httpx/punycode.rb +22 -0
- data/lib/httpx/request/body.rb +158 -0
- data/lib/httpx/request.rb +328 -0
- data/lib/httpx/resolver/entry.rb +30 -0
- data/lib/httpx/resolver/https.rb +256 -0
- data/lib/httpx/resolver/multi.rb +102 -0
- data/lib/httpx/resolver/native.rb +547 -0
- data/lib/httpx/resolver/resolver.rb +173 -0
- data/lib/httpx/resolver/system.rb +255 -0
- data/lib/httpx/resolver.rb +189 -0
- data/lib/httpx/response/body.rb +242 -0
- data/lib/httpx/response/buffer.rb +115 -0
- data/lib/httpx/response.rb +304 -0
- data/lib/httpx/selector.rb +282 -0
- data/lib/httpx/session.rb +612 -0
- data/lib/httpx/session_extensions.rb +30 -0
- data/lib/httpx/timers.rb +133 -0
- data/lib/httpx/transcoder/body.rb +43 -0
- data/lib/httpx/transcoder/chunker.rb +115 -0
- data/lib/httpx/transcoder/deflate.rb +37 -0
- data/lib/httpx/transcoder/form.rb +68 -0
- data/lib/httpx/transcoder/gzip.rb +71 -0
- data/lib/httpx/transcoder/json.rb +71 -0
- data/lib/httpx/transcoder/multipart/decoder.rb +141 -0
- data/lib/httpx/transcoder/multipart/encoder.rb +120 -0
- data/lib/httpx/transcoder/multipart/mime_type_detector.rb +78 -0
- data/lib/httpx/transcoder/multipart/part.rb +35 -0
- data/lib/httpx/transcoder/multipart.rb +31 -0
- data/lib/httpx/transcoder/utils/body_reader.rb +46 -0
- data/lib/httpx/transcoder/utils/deflater.rb +75 -0
- data/lib/httpx/transcoder.rb +91 -0
- data/lib/httpx/utils.rb +75 -0
- data/lib/httpx/version.rb +5 -0
- data/lib/httpx.rb +66 -0
- data/sig/altsvc.rbs +33 -0
- data/sig/buffer.rbs +27 -0
- data/sig/callbacks.rbs +15 -0
- data/sig/chainable.rbs +55 -0
- data/sig/connection/http1.rbs +85 -0
- data/sig/connection/http2.rbs +116 -0
- data/sig/connection.rbs +169 -0
- data/sig/domain_name.rbs +17 -0
- data/sig/errors.rbs +69 -0
- data/sig/headers.rbs +49 -0
- data/sig/httpx.rbs +27 -0
- data/sig/io/ssl.rbs +27 -0
- data/sig/io/tcp.rbs +72 -0
- data/sig/io/udp.rbs +25 -0
- data/sig/io/unix.rbs +26 -0
- data/sig/io.rbs +3 -0
- data/sig/loggable.rbs +17 -0
- data/sig/options.rbs +202 -0
- data/sig/parser/http1.rbs +59 -0
- data/sig/plugins/auth/basic.rbs +17 -0
- data/sig/plugins/auth/digest.rbs +25 -0
- data/sig/plugins/auth/ntlm.rbs +20 -0
- data/sig/plugins/auth/socks5.rbs +18 -0
- data/sig/plugins/auth.rbs +13 -0
- data/sig/plugins/aws_sdk_authentication.rbs +43 -0
- data/sig/plugins/aws_sigv4.rbs +78 -0
- data/sig/plugins/basic_auth.rbs +15 -0
- data/sig/plugins/brotli.rbs +22 -0
- data/sig/plugins/callbacks.rbs +38 -0
- data/sig/plugins/circuit_breaker.rbs +71 -0
- data/sig/plugins/compression.rbs +57 -0
- data/sig/plugins/content_digest.rbs +51 -0
- data/sig/plugins/cookies/cookie.rbs +55 -0
- data/sig/plugins/cookies/jar.rbs +26 -0
- data/sig/plugins/cookies/set_cookie_parser.rbs +22 -0
- data/sig/plugins/cookies.rbs +28 -0
- data/sig/plugins/digest_auth.rbs +21 -0
- data/sig/plugins/expect.rbs +15 -0
- data/sig/plugins/fiber_concurrency.rbs +51 -0
- data/sig/plugins/follow_redirects.rbs +47 -0
- data/sig/plugins/grpc/call.rbs +23 -0
- data/sig/plugins/grpc/grpc_encoding.rbs +37 -0
- data/sig/plugins/grpc/message.rbs +17 -0
- data/sig/plugins/grpc.rbs +65 -0
- data/sig/plugins/h2c.rbs +27 -0
- data/sig/plugins/ntlm_auth.rbs +21 -0
- data/sig/plugins/oauth.rbs +68 -0
- data/sig/plugins/persistent.rbs +14 -0
- data/sig/plugins/proxy/http.rbs +30 -0
- data/sig/plugins/proxy/socks4.rbs +37 -0
- data/sig/plugins/proxy/socks5.rbs +49 -0
- data/sig/plugins/proxy/ssh.rbs +18 -0
- data/sig/plugins/proxy.rbs +70 -0
- data/sig/plugins/push_promise.rbs +23 -0
- data/sig/plugins/query.rbs +18 -0
- data/sig/plugins/rate_limiter.rbs +13 -0
- data/sig/plugins/response_cache/file_store.rbs +19 -0
- data/sig/plugins/response_cache/store.rbs +13 -0
- data/sig/plugins/response_cache.rbs +86 -0
- data/sig/plugins/retries.rbs +66 -0
- data/sig/plugins/ssrf_filter.rbs +26 -0
- data/sig/plugins/stream.rbs +54 -0
- data/sig/plugins/stream_bidi.rbs +68 -0
- data/sig/plugins/upgrade/h2.rbs +9 -0
- data/sig/plugins/upgrade.rbs +29 -0
- data/sig/plugins/webdav.rbs +23 -0
- data/sig/plugins/xml.rbs +37 -0
- data/sig/pool.rbs +51 -0
- data/sig/punycode.rbs +5 -0
- data/sig/request/body.rbs +34 -0
- data/sig/request.rbs +88 -0
- data/sig/resolver/entry.rbs +13 -0
- data/sig/resolver/https.rbs +45 -0
- data/sig/resolver/multi.rbs +32 -0
- data/sig/resolver/native.rbs +74 -0
- data/sig/resolver/resolver.rbs +64 -0
- data/sig/resolver/system.rbs +34 -0
- data/sig/resolver.rbs +48 -0
- data/sig/response/body.rbs +52 -0
- data/sig/response/buffer.rbs +23 -0
- data/sig/response.rbs +103 -0
- data/sig/selector.rbs +68 -0
- data/sig/session.rbs +104 -0
- data/sig/timers.rbs +54 -0
- data/sig/transcoder/body.rbs +24 -0
- data/sig/transcoder/chunker.rbs +49 -0
- data/sig/transcoder/deflate.rbs +12 -0
- data/sig/transcoder/form.rbs +34 -0
- data/sig/transcoder/gzip.rbs +27 -0
- data/sig/transcoder/json.rbs +28 -0
- data/sig/transcoder/multipart.rbs +103 -0
- data/sig/transcoder/utils/body_reader.rbs +15 -0
- data/sig/transcoder/utils/deflater.rbs +28 -0
- data/sig/transcoder.rbs +43 -0
- data/sig/utils.rbs +19 -0
- metadata +518 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 0.2.1
|
|
2
|
+
|
|
3
|
+
* fixed setting timeouts using the chainable API
|
|
4
|
+
|
|
5
|
+
* Basic Auth: proper user/password escaping
|
|
6
|
+
|
|
7
|
+
* Improved multi-request support, by allowing to pass request-specific options for multiple requests
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
tokens = ["TOKEN1", "TOKEN2", "TOKEN3"]
|
|
11
|
+
uri = "https://example.com/protected"
|
|
12
|
+
|
|
13
|
+
requests = tokens.map { |token| [uri, {headers: {'authorization': token} }] }
|
|
14
|
+
|
|
15
|
+
responses = HTTPX.get(*requests)
|
|
16
|
+
```
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 0.3.0
|
|
2
|
+
|
|
3
|
+
* removed `http_parser.rb`, which is unmaintained, builds an old version of node's parser, and doesn't work on JRuby 9.2; also, better support over HTTP/1 features.
|
|
4
|
+
|
|
5
|
+
* Alt-Svc support (all remaining origin requests will be routed there); Supports both `Alt-Svc` header and the `altsvc` HTTP/2 frame.
|
|
6
|
+
|
|
7
|
+
* moved multipart requests support to a separate plugin, which removed `http_form_data` as a hard dependency (you'll still need it for the plugin though).
|
|
8
|
+
|
|
9
|
+
* new `HTTP.wrap { |client| }` method.
|
|
10
|
+
|
|
11
|
+
* We have a cheatsheet!
|
|
12
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# 0.4.0
|
|
2
|
+
|
|
3
|
+
* Feature: SSH proxy plugin -> send requests over ssh gateway;
|
|
4
|
+
|
|
5
|
+
```ruby
|
|
6
|
+
HTTPX.plugin(:"proxy/ssh").
|
|
7
|
+
with_proxy(uri: "ssh://localhost:2222",
|
|
8
|
+
username: "root",
|
|
9
|
+
auth_methods: %w[publickey],
|
|
10
|
+
host_key: "ssh-rsa",
|
|
11
|
+
keys: %w[test/support/ssh/ssh_host_ed25519_key]).get(URI)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
* Feature: Faraday Adapter
|
|
15
|
+
|
|
16
|
+
* refactoring: cookies plugin API simplification (this is a breaking change!):
|
|
17
|
+
|
|
18
|
+
```ruby
|
|
19
|
+
session = HTTPX.plugin(:cookies)
|
|
20
|
+
session.with_cookies("a" => "b").get(...
|
|
21
|
+
session.cookies #=> session current cookie store, persists/updates session cookies as requests are processed
|
|
22
|
+
session.wrap do |session|
|
|
23
|
+
session.get(..) #=> "Set-Cookie"
|
|
24
|
+
...
|
|
25
|
+
end #=> after this, cookie store resets to the state previous to wrap
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Removed `Session#cookie_store`
|
|
29
|
+
|
|
30
|
+
```ruby
|
|
31
|
+
client = HTTPX.plugin(:cookies)
|
|
32
|
+
redirect_response = client.get(URI) #=> ... 302 ... Set-Cookie: "blablalba" ...
|
|
33
|
+
# this sets the cookies
|
|
34
|
+
# GET .... Cookie: "blablabla" ....
|
|
35
|
+
response = client.get(URI) #=> ... 200 ...
|
|
36
|
+
# also, setting cookies:
|
|
37
|
+
|
|
38
|
+
client.cookies("a" => "b").get(URI) # ... Cookie: "a=b" ...
|
|
39
|
+
|
|
40
|
+
#also seamlessly integrates with redirect follows
|
|
41
|
+
client = HTTPX.plugins(:follow_redirects, :cookies)
|
|
42
|
+
response = client.get(URI) #=> ... 200 ...
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
* refactoring: connection pool now thread-local, improves thread-safety;
|
|
46
|
+
|
|
47
|
+
* bugfix: leaking dns query when passing IO object as option;
|
|
48
|
+
|
|
49
|
+
* bugfix: now multiple different resolvers are supported;
|
|
50
|
+
|
|
51
|
+
* support: JRuby is again supported (as usual, only latest stable is guaranteed)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 0.5.0
|
|
2
|
+
|
|
3
|
+
This release is a minor bump only because it introduces a new dependency:
|
|
4
|
+
|
|
5
|
+
## the `timers` gem
|
|
6
|
+
|
|
7
|
+
We've introduced the [`timers` gem](https://github.com/socketry/timers) as a dependency to deal with total timeouts, thereby making the timeout object only a container of values to be refactored. This was in itself a small gain for such a big addition, but other future time-based features can be best built upon it than the existing work.
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## Bugfixes
|
|
11
|
+
|
|
12
|
+
* the altsvc header wasn't properly parsed, and was breaking requests to google. Don't break requests to google!
|
|
13
|
+
* Added support for faraday 0.16;
|
|
14
|
+
* Made the IO selector less flaky;
|
|
15
|
+
* Fixed the homepage, which was being displayed without styles;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 0.5.1
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* Fixed flakiness of test suite introduced in the 0.4 versions;
|
|
6
|
+
* compression plugin:
|
|
7
|
+
* do not send `accept-encoding` header when `range` is present;
|
|
8
|
+
* Remove from `content-encoding` if body stream decodes it;
|
|
9
|
+
* Added `HTTPX::Response::Body#encodings` to return the decoded encoding(s);
|
|
10
|
+
|
|
11
|
+
## Bugfixes
|
|
12
|
+
|
|
13
|
+
* non-UTF-8 bodies weren't being properly handled, which led to a loop report (`slice` -> `byteslice`);
|
|
14
|
+
* connection reuse now also happens for requests with body (it was only working with `GET`s and other bodyless requests before);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 0.6.3
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* HTTP/2 `ORIGIN` frame support (https://tools.ietf.org/html/draft-ietf-httpbis-origin-frame-06);
|
|
6
|
+
* Added functional tests for HTTP/2 connection coalescing (and fixed it, as it hasn't been working for a while);
|
|
7
|
+
* Added functional tests for `Alt-Svc` header support;
|
|
8
|
+
|
|
9
|
+
## Bugfixes
|
|
10
|
+
|
|
11
|
+
* fixing alternative service redirection if `alt-svc` header pointed to the current peer;
|
|
12
|
+
* fixing `alt-svc` support when ruby version does not support ALPN negotation;
|
|
13
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# 0.6.4
|
|
2
|
+
|
|
3
|
+
This release takes where the last left off, and makes a concerted effort to improve both the test coverage and the number of features for which there are functional tests.
|
|
4
|
+
|
|
5
|
+
## Improvements
|
|
6
|
+
|
|
7
|
+
* Running Ruby 2.7 with no warnings;
|
|
8
|
+
|
|
9
|
+
* Test suite now has functional tests for:
|
|
10
|
+
* authentication on proxies (http, socks4a, socks5);
|
|
11
|
+
* DNS-over-HTTPS;
|
|
12
|
+
* connect timeouts (still a bit flaky though);
|
|
13
|
+
|
|
14
|
+
* Improved test coverage of project to 90%;
|
|
15
|
+
|
|
16
|
+
* building website/blog with Jekyll 4;
|
|
17
|
+
|
|
18
|
+
## Bugfixes
|
|
19
|
+
|
|
20
|
+
* fixed regressions on HTTP, SOCKS4a and SOCKS5 proxy authentication;
|
|
21
|
+
* fixed DNS-over-HTTPS implementation to be compliant with the latest RFC;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# 0.6.5
|
|
2
|
+
|
|
3
|
+
This release fixes important bugs, and automates the PKI for the test suite.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
* `resolver_options` can now receive a `:cache` flag (default: `true`). This bypasses caching and forces the lookup;
|
|
8
|
+
|
|
9
|
+
## Improvements
|
|
10
|
+
|
|
11
|
+
* Building the TLS certs necessary for the test suite has been scripted, after the initial certs expired and brought the CI to a halt;
|
|
12
|
+
* All DNS resolvers have a functional test, both for the happy as well as the error case;
|
|
13
|
+
* Added functional tests for HTTP and HTTPS proxy with authentication, making all proxy options now tested with authentication;
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## Bugfixes
|
|
17
|
+
|
|
18
|
+
* native and https DNS resolvers weren't usable after a resolving error;
|
|
19
|
+
* system DNS resolver could halt the system after a dns resolving error;
|
|
20
|
+
* fixed system halt on HTTP proxy authentication error;
|
|
21
|
+
|
|
22
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 0.6.6
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
* The `retries` plugin receives two new options:
|
|
6
|
+
* `retry_on`: a callable that receives the failed response as an argument; the return value will determine whether there'll be a retried request.
|
|
7
|
+
* `retry_after`: time (in seconds) after which there request will be retried. Can be an integer or a callable that receives the request and returns an integer (one can do exponential back-off like that, for example).
|
|
8
|
+
* Added support for DNS-over-HTTPS GET requests as per the latest spec.
|
|
9
|
+
|
|
10
|
+
## Improvements
|
|
11
|
+
|
|
12
|
+
* `HTTPX.plugins` got deprecated; basically, it's great until you have to pass options to a plugin, and then it just works (not). The recommended way to load multiple plugins is `HTTPX.plugin(...).plugin(...)`.
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
## Bugfixes
|
|
16
|
+
|
|
17
|
+
* fixed a proxy bug where an `Alt-Svc` response header would make the client try to connect. Just like connection coalescing and the ORIGIN frame, it ignores it when going through a proxy.
|
|
18
|
+
|
|
19
|
+
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# 0.6.7
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* An error was reported when using the follow plugin allowing insecure redirects: if the insecure redirect would be for the same host, and the original request was performed with HTTP/2, the library would try to coalesce the request, and blocks the reactor. A check was made to ensure that connection only coalesces if both are https connections.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# 0.7.0
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## Features
|
|
5
|
+
|
|
6
|
+
New option: `:max_requests`. This is a connection-level option signalizing how many requests can be performed on a connection. Although the HTTP/1 parser defined this well, in HTTP/2 this wasn't very clear, so: by definition, the remote MAX_CONCURRENT_STREAMS setting will be used to define it, unless the user explicitly passed the option. You can also pass `:max_requests => Float::INFINITY` if you know that the server allows more requests than that on a connection.
|
|
7
|
+
|
|
8
|
+
New plugin: `:expect`.
|
|
9
|
+
|
|
10
|
+
Although there was support for `expect: 100-continue` header already when passed, this plugin can:
|
|
11
|
+
|
|
12
|
+
* automatically set the header on requests with body;
|
|
13
|
+
* execute the flow;
|
|
14
|
+
* recover from 417 status errors (i.e. try again without it);
|
|
15
|
+
* send body after X seconds if no 100 response came;
|
|
16
|
+
|
|
17
|
+
Suport for `with_` methods for the session. As long as the suffix is a valid attribute, it's just like that:
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
HTTPX.with_timeout(...).with_ssl(...)
|
|
21
|
+
# same as:
|
|
22
|
+
# HTTPX.with(timeout: ..., ssl: ...)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Improvements
|
|
26
|
+
|
|
27
|
+
### Connections
|
|
28
|
+
|
|
29
|
+
The following improvements make the `persistent` plugin way more resilient:
|
|
30
|
+
|
|
31
|
+
* Better balancing of HTTP/2 connections by distributing requests among X connections depending of how many requests they can process.
|
|
32
|
+
* Exhausted connections can off-load to a new same-origin connection (such as, when the server negotiates less `MAX_CONCURRENT_STREAMS` than what's expected).
|
|
33
|
+
|
|
34
|
+
### Timeouts
|
|
35
|
+
|
|
36
|
+
(Timeouts will be one of the main improvements from the 0.7.x series)
|
|
37
|
+
|
|
38
|
+
`:total_timeout` is now a connection-level directive, which means that this feature will actually make more sense and account for all requests in a block at the same time, instead of one-by-one.
|
|
39
|
+
|
|
40
|
+
### Options
|
|
41
|
+
|
|
42
|
+
Option setters were being bypassed, therefore a lot of the type-checks defined there weren't effectively being picked upon, which could have led to weird user errors.
|
|
43
|
+
|
|
44
|
+
## Bugfixes
|
|
45
|
+
|
|
46
|
+
* fixed the `push_promise` plugin integration (wasn't working well since `http-2-next` was adopted);
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 0.8.0
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
## Features
|
|
5
|
+
|
|
6
|
+
* `keep_alive_timeout`: for persistent connections, the keep alive timeout will set the connection to be closed if not reused for a request **after** the last received response;
|
|
7
|
+
|
|
8
|
+
## Improvements
|
|
9
|
+
|
|
10
|
+
* using `max_requests` for HTTP/1 pipelining as well;
|
|
11
|
+
* `retries` plugin now works with plain HTTP responses (not just error responses);
|
|
12
|
+
* reduced the number of string allocations from log labels;
|
|
13
|
+
* performance: a lot of improvements were made to optimize the "waiting for IO events" phase, which dramatically reduced the CPU usage and make the performance of the library more on-par with other ruby HTTP gems for the 1-shot request scenario.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
## Bugfixes
|
|
17
|
+
|
|
18
|
+
* fixed `HTTPX::Response#copy_to`;
|
|
19
|
+
* fixed `compression` plugin not properly compressing request bodies using `gzip`;
|
|
20
|
+
* fixed `compression` plugin not handling `content-encoding: identity` payloads;
|
|
21
|
+
* do not overwrite user-defined `max_requests`on HTTP2 connection handshake;
|
|
22
|
+
* `retries` plugin: connection was blocking when a request with body was retried;
|
|
23
|
+
* `alt-svc: clear` response header was causing the process to hang;
|
|
24
|
+
|
|
25
|
+
## Tests
|
|
26
|
+
|
|
27
|
+
* Code coverage improved to 91%;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 0.8.2
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
* `:expect` plugin now supports a new option, `:expect_threshold_size`, meaning: the byte size threshold below which no `expect` header will be sent with requests with payload.
|
|
6
|
+
* `:compression` plugin now supports a new option, `:compression_threshold_size`, meaning: the bytesize threshold below which request payload won't be compressed before being sent.
|
|
7
|
+
* for HTTP/2 connections, when `keep_alive_timeout` expires, a `PING` frame is used to check connection availability; if successful, the connection will be reused.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 0.9.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### Multiple requests with specific options
|
|
6
|
+
|
|
7
|
+
You can now pass a third element to the "request element" of an array to `.request`.
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
requests = [
|
|
11
|
+
[:post, "https://url/post", { form: { foo: "bar" } }],
|
|
12
|
+
[:post, "https://url/post", { form: { foo: "bar2" } }]
|
|
13
|
+
]
|
|
14
|
+
HTTPX.request(requests)
|
|
15
|
+
# or, if you want to pass options common to all requests
|
|
16
|
+
HTTPX.request(requests, max_concurrent_requests: 1)
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### HTTPX::Session#build_request
|
|
21
|
+
|
|
22
|
+
`HTTPX::Session::build_request` is now public API from a session. You can now build requests before you send them. These request objects are still considered somewhat "internal", so consider them immutable and **do not rely on its API**. Just pass them forward.
|
|
23
|
+
|
|
24
|
+
Note: this API is only available for instantiated session, so there is no `HTTPX.build_request`.
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
|
|
29
|
+
HTTPX.wrap do |http|
|
|
30
|
+
requests = [
|
|
31
|
+
http.build_request(:post, "https://url/post", { form: { foo: "bar" } }),
|
|
32
|
+
http.build_request(:post, "https://url/post", { form: { foo: "bar2" } })
|
|
33
|
+
]
|
|
34
|
+
http.request(requests)
|
|
35
|
+
# or, if you want to pass options common to all requests
|
|
36
|
+
http.request(requests, max_concurrent_requests: 1)
|
|
37
|
+
end
|
|
38
|
+
```
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# 1.0.0
|
|
2
|
+
|
|
3
|
+
## Breaking changes
|
|
4
|
+
|
|
5
|
+
* the minimum supported ruby version is 2.7.0 .
|
|
6
|
+
* The fallback support for IDNA 2003 has been removed. If you require this feature, install the [idnx gem](https://github.com/HoneyryderChuck/idnx), which `httpx` automatically integrates with when available (and supports IDNA 2008).
|
|
7
|
+
* `:total_timeout` option has been removed (no session-wide timeout supported, use `:request_timeout`).
|
|
8
|
+
* `:read_timeout` and `:write_timeout` are now set to 60 seconds by default, and preferred over `:operation_timeout`;
|
|
9
|
+
* the exception being in the `:stream` plugin, as the response is theoretically endless (so `:read_timeout` is unset).
|
|
10
|
+
* The `:multipart` plugin is removed, as its functionality and API are now loaded by default (no API changes).
|
|
11
|
+
* The `:compression` plugin is removed, as its functionality and API are now loaded by default (no API changes).
|
|
12
|
+
* `:compression_threshold_size` was removed (formats in `"content-encoding"` request header will always encode the request body).
|
|
13
|
+
* the new `:compress_request_body` and `:decompress_response_body` can be set to `false` to (respectively) disable compression of passed input body, or decompression of the response body.
|
|
14
|
+
* `:retries` plugin: the `:retry_on` condition will **not** replace default retriable error checks, it will now instead be triggered **only if** no retryable error has been found.
|
|
15
|
+
|
|
16
|
+
### plugins
|
|
17
|
+
|
|
18
|
+
* `:authentication` plugin becomes `:auth`.
|
|
19
|
+
* `.authentication` helper becomes `.authorization`.
|
|
20
|
+
* `:basic_authentication` plugin becomes `:basic_auth`.
|
|
21
|
+
* `:basic_authentication` helper is removed.
|
|
22
|
+
* `:digest_authentication` plugin becomes `:digest_auth`.
|
|
23
|
+
* `:digest_authentication` helper is removed.
|
|
24
|
+
* `:ntlm_authentication` plugin becomes `:ntlm_auth`.
|
|
25
|
+
* `:ntlm_authentication` helper is removed.
|
|
26
|
+
* OAuth plugin: `:oauth_authentication` helper is rename to `:oauth_auth`.
|
|
27
|
+
* `:compression/brotli` plugin becomes `:brotli`.
|
|
28
|
+
|
|
29
|
+
### Support removed for deprecated APIs
|
|
30
|
+
|
|
31
|
+
* The deprecated `HTTPX::Client` constant lookup has been removed (use `HTTPX::Session` instead).
|
|
32
|
+
* The deprecated `HTTPX.timeout({...})` function has been removed (use `HTTPX.with(timeout: {...})` instead).
|
|
33
|
+
* The deprecated `HTTPX.headers({...})` function has been removed (use `HTTPX.with(headers: {...})` instead).
|
|
34
|
+
* The deprecated `HTTPX.plugins(...)` function has been removed (use `HTTPX.plugin(...).plugin(...)...` instead).
|
|
35
|
+
* The deprecated `:transport_options` option, which was only valid for UNIX connections, has been removed (use `:addresses` instead).
|
|
36
|
+
* The deprecated `def_option(...)` function, previously used to define additional options in plugins, has been removed (use `def option_$new_option)` instead).
|
|
37
|
+
* The deprecated `:loop_timeout` timeout option has been removed.
|
|
38
|
+
* `:stream` plugin: the deprecated `HTTPX::InstanceMethods::StreamResponse` has been removed (use `HTTPX::StreamResponse` instead).
|
|
39
|
+
* The deprecated usage of symbols to indicate HTTP verbs (i.e. `HTTPX.request(:get, ...)` or `HTTPX.build_request(:get, ...)`) is not supported anymore (use the upcase string always, i.e. `HTTPX.request("GET", ...)` or `HTTPX.build_request("GET", ...)`, instead).
|
|
40
|
+
* The deprecated `HTTPX::ErrorResponse#status` method has been removed (use `HTTPX::ErrorResponse#error` instead).
|
|
41
|
+
|
|
42
|
+
### dependencies
|
|
43
|
+
|
|
44
|
+
* `http-2-next` minimum supported version is 1.0.0.
|
|
45
|
+
* `:datadog` adapter only supports `ddtrace` gem 1.x or higher.
|
|
46
|
+
* `:faraday` adapter only supports `faraday` gem 1.x or higher.
|
|
47
|
+
|
|
48
|
+
## Improvements
|
|
49
|
+
|
|
50
|
+
* `circuit_breaker`: the drip rate of real request during the "half-open" stage of a circuit will reliably distribute real requests (as per the drip rate) over the `max_attempts`, before the circuit is closed.
|
|
51
|
+
|
|
52
|
+
## Bugfixes
|
|
53
|
+
|
|
54
|
+
* Tempfiles are now correctly identified as file inputs for multipart requests.
|
|
55
|
+
* fixed `proxy` plugin behaviour when loaded with the `follow_redirects` plugin and processing a 305 response (request needs to be retried on a different proxy).
|
|
56
|
+
|
|
57
|
+
## Chore
|
|
58
|
+
|
|
59
|
+
* `:grpc` plugin: connection won't buffer requests before HTTP/2 handshake is commpleted, i.e. works the same as plain `httpx` HTTP/2 connection establishment.
|
|
60
|
+
* if you are relying on this, you can keep the old behavior this way: `HTTPX.plugin(:grpc, http2_settings: { wait_for_handshake: false })`.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 1.0.2
|
|
2
|
+
|
|
3
|
+
## bugfixes
|
|
4
|
+
|
|
5
|
+
* bump `http-2-next` to 1.0.1, which fixes a bug where http/2 connection interprets MAX_CONCURRENT_STREAMS as request cap.
|
|
6
|
+
* `grpc`: setup of rpc calls from camel-cased symbols has been fixed. As an improvement, the GRPC-enabled session will now support both snake-cased, as well as camel-cased calls.
|
|
7
|
+
* `datadog` adapter has now been patched to support the most recent breaking changes of `ddtrace` configuration DSL (`env_to_bool` is no longer supported).
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# 1.1.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
A function, `#peer_address`, was added to the response object, which returns the IP (either a string or an `IPAddr` object) from the socket used to get the response from.
|
|
6
|
+
|
|
7
|
+
```ruby
|
|
8
|
+
response = HTTPX.get("https://example.com")
|
|
9
|
+
response.peer_address #=> #<IPAddr: IPv4:93.184.216.34/255.255.255.255>
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
error responses will also expose an IP address via `#peer_address` as long a connection happened before the error.
|
|
13
|
+
|
|
14
|
+
## Improvements
|
|
15
|
+
|
|
16
|
+
* A performance regression involving the new default timeouts has been fixed, which could cause significant overhead in "multiple requests in sequence" scenarios, and was clearly visible in benchmarks.
|
|
17
|
+
* this regression will still be seen in jruby due to a bug, which fix will be released in jruby 9.4.5.0.
|
|
18
|
+
* HTTP/1.1 connections are now set to handle as many requests as they can by default (instead of the past default of max 200, at which point they'd be recycled).
|
|
19
|
+
* tolerate the inexistence of `openssl` in the installed ruby, like `net-http` does.
|
|
20
|
+
* `on_connection_opened` and `on_connection_closed` will yield the `OpenSSL::SSL::SSLSocket` instance for `https` backed origins (instead of always the `Socket` instance).
|
|
21
|
+
|
|
22
|
+
## Bugfixes
|
|
23
|
+
|
|
24
|
+
* when using the `:native` resolver (default option), a default of 1 for ndots is set, for systems which do not set one.
|
|
25
|
+
* replaced usage of `Float::INFINITY` with `nil` for timeout defaults, as the former can't be used in IO wait functions.
|
|
26
|
+
* `faraday` adapter timeout setup now maps to `:read_timeout` and `:write_timeout` options from `httpx`.
|
|
27
|
+
* fixed HTTP/1.1 connection recycling on number of max requests exhausted.
|
|
28
|
+
* `response.json` will now work when "content-type" header is set to "application/hal+json".
|
|
29
|
+
|
|
30
|
+
## Chore
|
|
31
|
+
|
|
32
|
+
* when using the `:cookies` plugin, a warning message to install the idnx message will only be emitted if the cookie domain is an IDN (this message was being shown all the time since v1 release).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 1.1.1
|
|
2
|
+
|
|
3
|
+
## improvements
|
|
4
|
+
|
|
5
|
+
* (Re-)enabling default retries in DNS name queries; this had been disabled as a result of revamping timeouts, and resulted in queries only being sent once, which is very little for UDP-related traffic, and breaks if using DNs rate-limiting software. Retries the query just once, for now.
|
|
6
|
+
|
|
7
|
+
## bugfixes
|
|
8
|
+
|
|
9
|
+
* reset timers when adding new intervals, as these may be added as a result on after-select connection handling, and must wait for the next tick cycle (before the patch, they were triggering too soon).
|
|
10
|
+
* fixed "on close" callback leak on connection reuse, which caused linear performance regression in benchmarks performing one request per connection.
|
|
11
|
+
* fixed hanging connection when an HTTP/1.1 emitted a "connection: close" header but the server would not emit one (it closes the connection now).
|
|
12
|
+
* fixed recursive dns cached lookups which may have already expired, and created nil entries in the returned address list.
|
|
13
|
+
* dns system resolver is now able to retry on failure.
|
|
14
|
+
|
|
15
|
+
## chore
|
|
16
|
+
|
|
17
|
+
* remove duplicated callback unregitering connections.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 1.1.2
|
|
2
|
+
|
|
3
|
+
## improvements
|
|
4
|
+
|
|
5
|
+
* only moving eden connections to idle when they're recycled.
|
|
6
|
+
|
|
7
|
+
## bugfixes
|
|
8
|
+
|
|
9
|
+
* skip closing a connection which is already closed during reset.
|
|
10
|
+
* sentry adapter: fixed `super` call which didn't have a super method (this prevented usinng sentry-enabled sessions with the `:retries` plugin).
|
|
11
|
+
* sentry adapter: fixing registering of sentry config.
|
|
12
|
+
* sentry adapter: do not propagate traces when relevant sdk options are disabled (such as `propagate_traces`).
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 1.1.3
|
|
2
|
+
|
|
3
|
+
## improvements
|
|
4
|
+
|
|
5
|
+
## security
|
|
6
|
+
|
|
7
|
+
* when using `:follow_redirects` plugin, the "authorization" header will be removed when following redirect responses to a different origin.
|
|
8
|
+
|
|
9
|
+
## bugfixes
|
|
10
|
+
|
|
11
|
+
* fixed `:stream` plugin not following redirect responses when used with the `:follow_redirects` plugin.
|
|
12
|
+
* fixed `:stream` plugin not doing content decoding when responses were p.ex. gzip-compressed.
|
|
13
|
+
* fixed bug preventing usage of IPv6 loopback or link-local addresses in the request URL in systems with no IPv6 internet connectivity (the request was left hanging).
|
|
14
|
+
* protect all code which may initiate a new connection from abrupt errors (such as internet turned off), as it was done on the initial request call.
|
|
15
|
+
|
|
16
|
+
## chore
|
|
17
|
+
|
|
18
|
+
internal usage of `mutex_m` has been removed (`mutex_m` is going to be deprecated in ruby 3.3).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 1.1.5
|
|
2
|
+
|
|
3
|
+
## improvements
|
|
4
|
+
|
|
5
|
+
* pattern matching support for responses has been backported to ruby 2.7 as well.
|
|
6
|
+
|
|
7
|
+
## bugfixes
|
|
8
|
+
|
|
9
|
+
* `stream` plugin: fix for `HTTPX::StreamResponse#each_line` not yielding the last line of the payload when not delimiter-terminated.
|
|
10
|
+
* `stream` plugin: fix `webmock` adapter integration when methods calls would happen in the `HTTPX::StreamResponse#each` block.
|
|
11
|
+
* `stream` plugin: fix `:follow_redirects` plugin integration which was caching the redirect response and using it for method calls inside the `HTTPX::StreamResponse#each` block.
|
|
12
|
+
* "103 early hints" responses will be ignored when processing the response (it was causing the response returned by sesssions to hold its headers, instead of the following 200 response, while keeping the 200 response body).
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# 1.2.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:ssrf_filter` plugin
|
|
6
|
+
|
|
7
|
+
The `:ssrf_filter` plugin prevents server-side request forgery attacks, by blocking requests to the internal network. This is useful when the URLs used to perform requests aren’t under the developer control (such as when they are inserted via a web application form).
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
http = HTTPX.plugin(:ssrf_filter)
|
|
11
|
+
|
|
12
|
+
# this works
|
|
13
|
+
response = http.get("https://example.com")
|
|
14
|
+
|
|
15
|
+
# this doesn't
|
|
16
|
+
response = http.get("http://localhost:3002")
|
|
17
|
+
response = http.get("http://[::1]:3002")
|
|
18
|
+
response = http.get("http://169.254.169.254/latest/meta-data/")
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
More info under https://honeyryderchuck.gitlab.io/httpx/wiki/SSRF-Filter
|
|
22
|
+
|
|
23
|
+
### `:callbacks` plugin
|
|
24
|
+
|
|
25
|
+
The session callbacks introduced in v0.24.0 are in its own plugin. Older code will still work and emit a deprecation warning.
|
|
26
|
+
|
|
27
|
+
More info under https://honeyryderchuck.gitlab.io/httpx/wiki/Callbacks
|
|
28
|
+
|
|
29
|
+
### `:redirect_on` option for `:follow_redirects` plugin
|
|
30
|
+
|
|
31
|
+
This option allows passing a callback which, when returning `false`, can interrupt the redirect loop.
|
|
32
|
+
|
|
33
|
+
```ruby
|
|
34
|
+
http = HTTPX.plugin(:follow_redirects).with(redirect_on: ->(location_uri) { BLACKLIST_HOSTS.include?(location_uri.host) })
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### `:close_on_handshake_timeout` timeout
|
|
38
|
+
|
|
39
|
+
A new `:timeout` option, `:close_handshake_timeout`, is added, which monitors connection readiness when performing HTTP/2 connection termination handshake.
|
|
40
|
+
|
|
41
|
+
## Improvements
|
|
42
|
+
|
|
43
|
+
* Internal "eden connections" concept was removed, and connection objects are now kept-and-reused during the lifetime of a session, even when closed. This simplified connectio pool implementation and improved performance.
|
|
44
|
+
* request using `:proxy` and `:retries` plugin enabled sessions will now retry on proxy connection establishment related errors.
|
|
45
|
+
|
|
46
|
+
## Bugfixes
|
|
47
|
+
|
|
48
|
+
* webmock adapter: mocked responses storing decoded payloads won't try to decode them again (fixes vcr/webmock integrations).
|
|
49
|
+
* webmock adapter: fix issue related with making real requests over webmock-enabled connection.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 1.2.2
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* only raise "unknown option" error when option is not supported, not anymore when error happens in the setup of a support option.
|
|
6
|
+
* usage of `HTTPX::Session#wrap` within a thread with other sessions using the `:persistent` plugin won't inadvertedly terminate its open connections.
|
|
7
|
+
* terminate connections on `IOError` (`SocketError` does not cover them).
|
|
8
|
+
* terminate connections on HTTP/2 protocol and handshake errors, which happen during establishment or termination of a HTTP/2 connection (they were being previously kept around, although they'd irrecoverable).
|
|
9
|
+
* `:oauth` plugin: fixing check preventing the OAuth metadata server integration path to be exercised.
|
|
10
|
+
* fix instantiation of the options headers object with the wrong headers class.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# 1.2.3
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* `:retries` plugin: allow `:max_retries` set to 0 (allows for a soft disable of retries when using the faraday adapter).
|
|
6
|
+
|
|
7
|
+
## Bugfixes
|
|
8
|
+
|
|
9
|
+
* `:oauth` plugin: fix for default auth method being ignored when setting grant type and scope as options only.
|
|
10
|
+
* ensure happy eyeballs-initiated cloned connections also set session callbacks (caused issues when server would respond with a 421 response, an event requiring a valid internal callback).
|
|
11
|
+
* native resolver cleanly transitions from tcp to udp after truncated DNS query (causing issues on follow-up CNAME resolution).
|
|
12
|
+
* elapsing timeouts now guard against mutation of callbacks while looping (prevents skipping callbacks in situations where a previous one would remove itself from the collection).
|
|
13
|
+
|
|
14
|
+
## Chore
|
|
15
|
+
|
|
16
|
+
* datadog adapter: do not call `.lazy` on options (avoids deprecation warning, to be removed in ddtrace 2.0)
|