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,39 @@
|
|
|
1
|
+
# 0.19.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### Happy Eyeballs v2
|
|
6
|
+
|
|
7
|
+
When the system supports dual-stack networking, `httpx` implements the Happy Eyeballs v2 algorithm (RFC 8305) to resolve hostnames to both IPv6 and IPv4 addresses while privileging IPv6 connectivity. This is implemented by `httpx` both for the `:native` as well as the `:https` (DoH) resolver (which do not perform address sorting, thereby being "DNS-based load-balancing" friendly), and "outsourced" to `getaddrinfo` when using the `:system` resolver.
|
|
8
|
+
|
|
9
|
+
IPv6 connectivity will also be privileged for `/etc/hosts` local DNS (i.e. `localhost` connections will connec to `::1`).
|
|
10
|
+
|
|
11
|
+
A new option, `:ip_families`, will also be available (`[Socket::AF_INET6, Socket::AF_INET]` in dual-stack systems). If you'd like to i.e. force IPv4 connectivity, you can do use it (`client = HTTPX.with(ip_families: [Socket::AF_INET])`).
|
|
12
|
+
|
|
13
|
+
## Improvements
|
|
14
|
+
|
|
15
|
+
### DNS: :system resolver uses getaddrinfo (instead of the resolver lib)
|
|
16
|
+
|
|
17
|
+
The `:system` resolver switched to using the `getaddinfo` system function to perform DNS requests. Not only is this call **not** blocking the session event loop anymore (unlike pre-0.19.0 `:system` resolver), it adds a lot of functionality that the stdlib `resolv` library just doesn't support at the moment (such as SRV records).
|
|
18
|
+
|
|
19
|
+
### HTTP/2 proxy support
|
|
20
|
+
|
|
21
|
+
The `:proxy` plugin handles "prior-knowledge" HTTP/2 proxies.
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
HTTPX.plugin(:proxy, fallback_protocol: "h2").with_proxy(uri: "http://http2-proxy:3128").get(...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
Connection coalescing has also been enabled for proxied connections (also `CONNECT`-tunneled connections).
|
|
28
|
+
|
|
29
|
+
### curl-to-httpx
|
|
30
|
+
|
|
31
|
+
widget in [project website](https://os85.gitlab.io/httpx/) to turn curl commands into the equivalent `httpx` code.
|
|
32
|
+
|
|
33
|
+
## Bugfixes
|
|
34
|
+
|
|
35
|
+
* faraday adapter now supports passing session options.
|
|
36
|
+
* proxy: several fixes which enabled env-var (`HTTP(S)_PROXY`) defined proxy support.
|
|
37
|
+
* proxy: fixed graceful recovery from proxy tcp connect errors.
|
|
38
|
+
* several fixes around CNAMEs timeouts with the native resolver.
|
|
39
|
+
* https resolver is now closed when wrapping session closes (it was left open).
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 0.19.2
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* skip resolution delay path for early resolve cases
|
|
6
|
+
|
|
7
|
+
when the early resolve path (using IP, /etc/hosts IP, IP from cache) is followed, emit_addresses is called, and in a particular case (dual-stack network but using an IPv4 address), the happy eyeballs resolution delay path was activated when it shouldn't (it's meant to be used only for DNS network requests), and resulted in @pool being called before it was ever set. This simple check ensures that it doesn't happen before it must.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 0.19.4
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
### Jruby: HTTP/2 with jruby-openssl (>= 0.12.2)
|
|
6
|
+
|
|
7
|
+
The (optional) FFI-based TLS module for jruby was deleted. Besides it being cumbersome and hard to maintain, `jruby`'s own `openssl` released support for ALPN negotiation (in v0.12.2), which solves the problem the deleted module was supposed to address.
|
|
8
|
+
|
|
9
|
+
## Bugfixes
|
|
10
|
+
|
|
11
|
+
* `webmock` integration was fixed to take the mocked URI query string into account.
|
|
12
|
+
* fix internal codepath where mergeable-but-not-coalescable connections were still triggering the coalesce branch.
|
|
13
|
+
* fixed after-use mutation of connection addresses array which was making it empty after initial usage.
|
|
14
|
+
* fixed a "busy loop" caused by long-running native resolver not signaling it had "nothing to do".
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 0.19.5
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### DNS: resolv.conf search/ndots options support (native/https resolvers)
|
|
6
|
+
|
|
7
|
+
Both the native (default) as well as the HTTPS (DoH) resolvers now support the "search" and "ndots" options, which adds domain "suffixes" under certain conditions to be used in name resolutions (this is a quite common feature found in kubernetes pods).
|
|
8
|
+
|
|
9
|
+
(While this means a new feature is being shipped in a patch release, one can argue that this feature "fixes" DNS in `httpx`.)
|
|
10
|
+
|
|
11
|
+
## Bugfixes
|
|
12
|
+
|
|
13
|
+
* skipping headers comparison in HTTPX::Options#==; this had the unintended consequence of breaking connection reuse when crafting requests in a certain way, thereby making every request to the same origin issue their own connection, resulting, in multi-request scenarios (and with the `:persistent` plugin), in the process exhausting the max amount of allowed file descriptors.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# 0.1.0
|
|
2
|
+
|
|
3
|
+
* Follow Redirects Plugin: Added `:follow_insecure_redirects` option, which will not follow https-to-http redirects.
|
|
4
|
+
|
|
5
|
+
* Allow optional option `:transport`. TCP sockets are the default tranport, but by passing `:unix`, one can also define it as a UNIX socket.
|
|
6
|
+
|
|
7
|
+
* Added Retries Plugin, which will retry a request a certain amount of times, provided that the request is safe.
|
|
8
|
+
|
|
9
|
+
* Proxy Plugin: allow multiple proxies to be passed. The client will perform requests on the first proxy successfully connected.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 0.20.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### Sentry integration
|
|
6
|
+
|
|
7
|
+
Documentation: https://gitlab.com/os85/httpx/-/wikis/Sentry-Adapter
|
|
8
|
+
|
|
9
|
+
`httpx` ships with integration for `sentry-ruby` to provide HTTP request specific breadcrumbs and tracing. It can be enabled via:
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
require "httpx/adapters/sentry"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### Proxy alternative auth schemes
|
|
16
|
+
|
|
17
|
+
Besides the already previously supported (and still default) HTTP Basic Auth, the `:proxy` plugin supports HTTP Digest and NTLM auth as well. These are made available via the following APIs:
|
|
18
|
+
|
|
19
|
+
```ruby
|
|
20
|
+
http = HTTPX.plugin(:proxy)
|
|
21
|
+
http.with_proxy_basic_auth(username: "user", password: "pass", uri: "http://proxy-uri:8126")
|
|
22
|
+
http.with_proxy_digest_auth(username: "user", password: "pass", uri: "http://proxy-uri:8126")
|
|
23
|
+
http.with_proxy_ntlm_auth(username: "user", password: "pass", uri: "http://proxy-uri:8126")
|
|
24
|
+
|
|
25
|
+
# or alternatively
|
|
26
|
+
http.with_proxy(proxy: "basic", username: "user", password: "pass", uri: "http://proxy-uri:8126")
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Bugfixes
|
|
30
|
+
|
|
31
|
+
* HTTPS requests on an URL with an IP as a host, will now correctly not perform SNI during the TLS handshake, as per RFC;
|
|
32
|
+
* `:follow_redirects` plugin will now halt redirections on 3xx responses with no `"location"` headers; this means it won't crash on 304 responses.
|
|
33
|
+
* If the `httpx` session has the `:proxy` plugin enabled, HTTP 305 responses will retry the request via the proxy exposed in the `"location"` header, as the RFC mandates.
|
|
34
|
+
* `alt-svc` connection switch for HTTPS requests will be halted if the advertised alternative service "downgrades" to cleartext (example: `alt-svc` advertises `"h2c"`, but original connection was enabled via TLS).
|
|
35
|
+
* A new connection to a TLS-enabled `alt-svc` advertised for a previous request, will now use that request's hostname as the SNI hostname, when performing the TLS handshake.
|
|
36
|
+
* the `:response_cache` plugin will now correctly handle capitalized HTTP headers advertised in the `"vary"` header.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 0.20.2
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* fix for selector timeout errors closing all connections and ignoring resolvers.
|
|
6
|
+
|
|
7
|
+
Timeout errors on select were being propagated to all pooled connections, although not all of them were being selected on, and not all of them having timed out. plus, resolver timeouts were doing the same, making connections fail with connection timeout error, rather than resolve timeout error. A patch was implemented, where the selector now yields an error to the selected connections, rather than plain raising exception.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 0.20.3
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* DoH resolver wasn't working for non-absolute (the large majority) of domains since v0.19.
|
|
6
|
+
* Allowing a single IP string to be passed to the resolver option `:nameserver` (just like the `resolv` library does), besides the already supported list of IPs.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 0.20.4
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
The `:response_cache` plugin is now more compliant with how the RFC 2616 defines which behaviour caches shall have:
|
|
6
|
+
|
|
7
|
+
* it caches only responses with one of the following status codes: 200, 203, 300, 301, 410.
|
|
8
|
+
* it discards cached responses which become stale.
|
|
9
|
+
* it supports "cache-control" header directives to decided when to cache, to store, what the response "age" is.
|
|
10
|
+
* it can cache more than one response for the same request, provided that the request presents different header values for the headers declared in the "vary" response header (previously, it was only caching the first response, and discarding the remainder).
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## Bugfixes
|
|
15
|
+
|
|
16
|
+
* fixed DNS resolution bug which caused a loop when a failed connection attempt would cause a new DNS request to be triggered for the same domain, filling up and giving preference to the very IP which failed the attempt.
|
|
17
|
+
* response_cache: request verb is now taken into account, not causing HEAD/GET confusion for the same URL.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# 0.21.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:write_timeout`, `:read_timeout` and `:request_timeout`
|
|
6
|
+
|
|
7
|
+
https://gitlab.com/os85/httpx/-/wikis/Timeouts
|
|
8
|
+
|
|
9
|
+
The following timeouts are now supported:
|
|
10
|
+
|
|
11
|
+
* `:write_timeout`: total time (in seconds) to write a request to the server;
|
|
12
|
+
* `:read_timeout`: total time (in seconds) to read a response from the server;
|
|
13
|
+
* `:request_timeout`: tracks both of the above (time to write the request and read a response);
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
HTTPX.with(timeout: { request_timeout: 60}).get(...
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Just like `:connect_timeout`, the new timeouts are deadline-oriented, rather than op-oriented, meaning that they do not reset on each socket operation (as most ruby HTTP clients do).
|
|
20
|
+
|
|
21
|
+
None of them has a default value, in order not to break integrations, but that'll change in a future v1, where they'll become the default timeouts.
|
|
22
|
+
|
|
23
|
+
### Circuit Breaker plugin
|
|
24
|
+
|
|
25
|
+
https://gitlab.com/os85/httpx/-/wikis/Circuit-Breaker
|
|
26
|
+
|
|
27
|
+
The `:circuit_breaker` plugin wraps around errors happening when performing HTTP requests, and support options for setting maximum number of attempts before circuit opens (`:circuit_breaker_max_attempts`), period after which attempts should be reset (`:circuit_breaker_reset_attempts_in`), timespan until circuit half-opens (`circuit_breaker_break_in`), respective half-open drip rate (`:circuit_breaker_half_open_drip_rate`), and a callback to do your own check on whether a response has failed, in case you want HTTP level errors to be marked as failed attempts (`:circuit_breaker_break_on`).
|
|
28
|
+
|
|
29
|
+
Read the wiki for more info about the defaults.
|
|
30
|
+
|
|
31
|
+
```ruby
|
|
32
|
+
http = HTTPX.plugin(:circuit_breaker)
|
|
33
|
+
# that's it!
|
|
34
|
+
http.get(...
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### WebDAV plugin
|
|
38
|
+
|
|
39
|
+
https://gitlab.com/os85/httpx/-/wikis/WebDav
|
|
40
|
+
|
|
41
|
+
The `:webdav` introduces some "convenience" methods to perform common WebDAV operations.
|
|
42
|
+
|
|
43
|
+
```ruby
|
|
44
|
+
webdav = HTTPX.plugin(:webdav, origin: "http://webdav-server")
|
|
45
|
+
.plugin(:digest_authentication).digest_auth("user", "pass")
|
|
46
|
+
|
|
47
|
+
res = webdav.put("/file.html", body: "this is the file body")
|
|
48
|
+
res = webdav.copy("/file.html", "/newdir/copy.html")
|
|
49
|
+
# ...
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### XML transcoder, `:xml` option and `response.xml`
|
|
53
|
+
|
|
54
|
+
A new transcoder was added fot the XML mime type, which requires `"nokogiri"` to be installed. It can both serialize Nokogiri nodes in a request, and parse response content into nokogiri nodes:
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
response = HTTPX.post("https://xml-server.com", xml: Nokogiri::XML("<xml ..."))
|
|
58
|
+
response.xml #=> #(Document:0x16e4 { name = "document", children = ...
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Improvements
|
|
62
|
+
|
|
63
|
+
### `:proxy` plugin: `:no_proxy` option
|
|
64
|
+
|
|
65
|
+
Support was added, in the `:proxy` plugin, to declare domains, either via regexp patterns, or strings, for which requests should bypass the proxy.
|
|
66
|
+
|
|
67
|
+
```ruby
|
|
68
|
+
http = HTTPX.plugin(:proxy).with_proxy(
|
|
69
|
+
uri: "http://10.10.0.1:51432",
|
|
70
|
+
no_proxy: ["gitlab.local", /*.google.com/]
|
|
71
|
+
)
|
|
72
|
+
http.get("https://duckduckgo.com/?q=httpx") #=> proxied
|
|
73
|
+
http.get("https://google.com/?q=httpx") #=> not proxied
|
|
74
|
+
http.get("https://gitlab.com") #=> proxied
|
|
75
|
+
http.get("https://gitlab.local") #=> not proxied
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### OOTB support for other JSON libraries
|
|
79
|
+
|
|
80
|
+
If one of `multi_json`, `oj` or `yajl` is available, all `httpx` operations doing JSON parsing or dumping will use it (the `json` standard library will be used otherwise).
|
|
81
|
+
|
|
82
|
+
```ruby
|
|
83
|
+
require "oj"
|
|
84
|
+
require "httpx"
|
|
85
|
+
|
|
86
|
+
response = HTTPX.post("https://somedomain.json", json: { "foo" => "bar" }) # will use "oj"
|
|
87
|
+
puts response.json # will use "oj"
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Bugfixes
|
|
91
|
+
|
|
92
|
+
* `:expect` plugin: `:expect_timeout` can accept floats (not just integers).
|
|
93
|
+
|
|
94
|
+
## Chore
|
|
95
|
+
|
|
96
|
+
* DoH `:https` resolver: support was removed for the "application/dns-json" mime-type (it was only supported in practice by the Google DoH resolver, which has since added support for the standardized "application/dns-message").
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 0.21.1
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* fix: protecting tcp connect phase against low-level syscall errors
|
|
6
|
+
* such as network unreachable, which can happen if connectivity is lost meanwhile.
|
|
7
|
+
* native resolver: fix for nameserver switch not happening in case of DNS timeout.
|
|
8
|
+
* when more than a nameserver was advertised by the system.
|
|
9
|
+
|
|
10
|
+
## Chore
|
|
11
|
+
|
|
12
|
+
* Removing usage of deprecated `Random::DEFAULT.rand` (using `Random.rand` instead)-
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 0.22.0
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
### Happy Eyeballs v2 finalized
|
|
6
|
+
|
|
7
|
+
Until now, httpx was issuing concurrent DNS requests, but it'd only start connecting to the first, and then on the following by the right order, but sequentially.
|
|
8
|
+
|
|
9
|
+
`httpx` will now establish connections concurrently to both IPv6 and IPv4 addresses of a given domain; the first one to succeed terminates the other. Successful connection means completion of both TCP and TLS (when applicable) handshakes.
|
|
10
|
+
|
|
11
|
+
### HTTPX::Response::Body#encoding
|
|
12
|
+
|
|
13
|
+
A new method, `#encoding`, can be called on response bodies. It'll return the encoding of the response payload.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 0.22.1
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* `:retries` plugin: fix `HTTPX::Response#response to point to last possible response in the redirection chain.
|
|
6
|
+
* `:stream` plugin: Make `HTTPX::Session#request` public (as it is inn the main class) .
|
|
7
|
+
* return 100 responses if the request didn't specifically ask for "100-continue" negotiation (via the "expect" header).
|
|
8
|
+
|
|
9
|
+
## Improvements
|
|
10
|
+
|
|
11
|
+
Wrap low-level socket errors in a `HTTPX::ConnectionError` exception.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# 0.22.3
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### HTTPX::Response::Body#filename
|
|
6
|
+
|
|
7
|
+
A new method, `.filename` can be called on response bodies, to get the filename referenced by the server for the received payload (usually in the "Content-Disposition" header).
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
response = HTTPX.get(url)
|
|
11
|
+
response.raise_for_status
|
|
12
|
+
filename = response.body.filename
|
|
13
|
+
# you can do, for example:
|
|
14
|
+
response.body.copy_to("/home/files/#{filename}")
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Improvements
|
|
18
|
+
|
|
19
|
+
### Loading integrations by default
|
|
20
|
+
|
|
21
|
+
Integrations will be loaded by default, as long as the dependency being integrated is already available:
|
|
22
|
+
|
|
23
|
+
```ruby
|
|
24
|
+
require "ddtrace"
|
|
25
|
+
require "httpx"
|
|
26
|
+
|
|
27
|
+
HTTPX.get(... # request will be traced via the datadog integration
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Faraday: better error handling
|
|
31
|
+
|
|
32
|
+
The `faraday` adapter will not raise errors anymore, when used in parallel mode. This fixes the difference in behaviour with the equivalent `typhoeus` parallel adapter, which does not raise errors in such cases as well. This behaviour will exclude 4xx and 5xx HTTP responses, which will not be considered errors in the `faraday` adapter.
|
|
33
|
+
|
|
34
|
+
If errors occur in parallel mode, these'll be available in `env[:error]`. Users can check it in two ways:
|
|
35
|
+
|
|
36
|
+
```ruby
|
|
37
|
+
response.status == 0
|
|
38
|
+
# or
|
|
39
|
+
!response.env[:error].nil?
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Bugfixes
|
|
43
|
+
|
|
44
|
+
* unix socket: handle the error when the path for the unix sock is invalid, which was causing an endless loop.
|
|
45
|
+
|
|
46
|
+
### IPv6 / Happy eyeballs v2
|
|
47
|
+
|
|
48
|
+
* the `native` resolver will now use IPv6 nameservers with zone identifier to perform DNS queries. This bug was being ignored prior to ruby 3.1 due to some pre-filtering on the nameservere which were covering misuse of the `uri` dependency for this use case.
|
|
49
|
+
* Happy Eyeballs v2 handshake error on connection establishment for the first IP will now ignore it, in case an ongoing connecting for the second IP is happening. This fixes a case where both IPv4 and IPv6 addresses are served for a given domain, but only one of them can be connected to (i.e. if connection via IPv6 fails, the IPv4 one should still proceed to completion).
|
|
50
|
+
* the `native` resolver won't try querying DNS name candidates, if the resolver sends an empty answer with an error code different from "domain not found".
|
|
51
|
+
* fix error of Happy Eyeballs v2 handshake, where the resulting connection would coalesce with an already open one for the same IP **before** requests were merged to the coalesced connection, resulting in no requests being sent and the client hanging.
|
|
52
|
+
|
|
53
|
+
## Chore
|
|
54
|
+
|
|
55
|
+
* fixed error message on wrong type of parameter for the `compression_threshold_size` option from the `:compression` plugin.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 0.22.4
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* fix happy eyeballs v2 bug where, once the first connection would be established, the remaining one would still end up in the coalescing loop, thereby closing itself via the `:tcp_open` callback.
|
|
6
|
+
* fix for faraday plugin parallel mode, where it'd hang if no requests would be made in the parallel block (@catlee)
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 0.22.5
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* `datadog` and `sentry` integrations did not account for `Connection#send` being possibly called multiple times (something possible for connection coalescing, max requests exhaustion, or Happy Eyeballs 2), and were registering multiple `on(:response)` callbacks. Requests are now marked when decorated the first time.
|
|
6
|
+
* Happy Eyeballs handshake "connect errors" routine is now taking both name resolution errors, as well as TLS handshake errors, into account, when the handshake fails.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# 0.23.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:retries` plugin: resumable requests
|
|
6
|
+
|
|
7
|
+
The `:retries` plugin will now support scenarios where, if the request being retried supports the `range` header, and a partial response has been already buffered, the retry will resume from there and only download the missing data.
|
|
8
|
+
|
|
9
|
+
#### HTTPX::ErrorResponse#response
|
|
10
|
+
|
|
11
|
+
As a result, ´HTTPX::ErrorResponse#response` has also been introduced; error responses may have an actual response. This happens in cases where the request failed **after** a partial response was initiated.
|
|
12
|
+
|
|
13
|
+
#### `:buffer_size` option
|
|
14
|
+
|
|
15
|
+
A nnew option, `:buffer_size`, can be used to tweak the buffers used by the read/write socket routines (16k by default, you can lower it in memory-constrained environments).
|
|
16
|
+
|
|
17
|
+
## Improvements
|
|
18
|
+
|
|
19
|
+
### `:native` resolver falls back to TCP for truncated messages
|
|
20
|
+
|
|
21
|
+
The `:native` resolver will repeat DNS queries to a nameserver via TCP when the first attempt is marked as truncated. This behaviour is both aligned with `getaddrinfo` and the `resolv` standard library.
|
|
22
|
+
|
|
23
|
+
This introduces a new `resolver_options` option, `:socket_type`, which can now be `:tcp` if it is to remain the default.
|
|
24
|
+
|
|
25
|
+
## Chore
|
|
26
|
+
|
|
27
|
+
### HTTPX.build_request should receive upcased string (i.e. "GET")
|
|
28
|
+
|
|
29
|
+
Functions which receive an HTTP verb should be given he verb in "upcased string" format now. The usage of symbols is still possible, but a deprecation warning will be emitted, and support will be removed in v1.0.0 .
|
|
30
|
+
|
|
31
|
+
### Remove HTTPX::Registry
|
|
32
|
+
|
|
33
|
+
These internal registries were a bit magical to use, difficult to debug, not thread-safe, and overall a nuisance when it came to type checking. While there is the possibility that someone was relying on it existing, nothing had ever been publicly documented.
|
|
34
|
+
|
|
35
|
+
## Bugfixes
|
|
36
|
+
|
|
37
|
+
* fixed proxy discovery using proxy env vars (`HTTPS_PROXY`, `NO_PROXY`...) being enabled/disabled based on first host uused in the session;
|
|
38
|
+
* fixed `:no_proxy` option usage inn the `:proxy` plugin.
|
|
39
|
+
* fixed `webmock` adapter to correctly disable it when `Webmock.disable!` is called.
|
|
40
|
+
* fixed bug in `:digest_authentication` plugin when enabled and no credentials were passed.
|
|
41
|
+
* fixed several bugs in the `sentry` adapter around breadcrumb handling.
|
|
42
|
+
* fixed `:native` resolver candidate calculation by putting absolute domain at the bottom of the list.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# 0.24.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:oauth` plugin
|
|
6
|
+
|
|
7
|
+
The `:oauth` plugin manages the handling of a given OAuth session, in that it ships with convenience methods to generate a new access token, which it then injects in all requests.
|
|
8
|
+
|
|
9
|
+
More info under https://honeyryderchuck.gitlab.io/httpx/wiki/OAuth
|
|
10
|
+
|
|
11
|
+
### session callbacks
|
|
12
|
+
|
|
13
|
+
HTTP request/response lifecycle events have now the ability of being intercepted via public API callback methods:
|
|
14
|
+
|
|
15
|
+
```ruby
|
|
16
|
+
HTTPX.on_request_completed do |request|
|
|
17
|
+
puts "request to #{request.uri} sent"
|
|
18
|
+
end.get(...)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
More info under https://honeyryderchuck.gitlab.io/httpx/wiki/Events to know which events and callback methods are supported.
|
|
22
|
+
|
|
23
|
+
### `:circuit_breaker` plugin `on_circuit_open` callback
|
|
24
|
+
|
|
25
|
+
A callback has been introduced for the `:circuit_breaker` plugin, which is triggered when a circuit is opened.
|
|
26
|
+
|
|
27
|
+
```ruby
|
|
28
|
+
http = HTTPX.plugin(:circuit_breaker).on_circuit_open do |req|
|
|
29
|
+
puts "circuit opened for #{req.uri}"
|
|
30
|
+
end
|
|
31
|
+
http.get(...)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Improvements
|
|
35
|
+
|
|
36
|
+
Several `:response_cache` features have been improved:
|
|
37
|
+
|
|
38
|
+
* `:response_cache` plugin: response cache store has been made thread-safe.
|
|
39
|
+
* cached response sharing across threads is made safer, as stringio/tempfile instances are copied instead of shared (without copying the underling string/file).
|
|
40
|
+
* stale cached responses are eliminate on cache store lookup/store operations.
|
|
41
|
+
* already closed responses are evicted from the cache store.
|
|
42
|
+
* fallback for lack of compatible response "date" header has been fixed to return a `Time` object.
|
|
43
|
+
|
|
44
|
+
## Bugfixes
|
|
45
|
+
|
|
46
|
+
* Ability to recover from errors happening during response chunk processing (required for overriding behaviour and response chunk callbacks); error bubbling up will result in the connection being closed.
|
|
47
|
+
* Happy eyeballs support for multi-homed early-resolved domain names (such as `localhost` under `/etc/hosts`) was broken, as it would try the first given IP; so, if given `::1` and connection would fail, it wouldn't try `127.0.0.1`, which would have succeeded.
|
|
48
|
+
* `:digest_authentication` plugin was removing the "algorithm" header on `-sess` declared algorithms, which is required for HTTP digest auth negotiation.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 0.24.1
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* datadog adapter: support `:service_name` configuration option.
|
|
6
|
+
* datadog adapter: set `:distributed_tracing` to `true` by default.
|
|
7
|
+
* `:proxy` plugin: when the proxy uri uses an unsupported scheme (i.e.: "scp://125.24.2.1"), a more user friendly error is raised (instead of the previous broken stacktrace).
|
|
8
|
+
|
|
9
|
+
## Bugfixes
|
|
10
|
+
|
|
11
|
+
* datadog adapter: fix tracing enable call, which was wrongly calling `super`.
|
|
12
|
+
+ `:proxy` plugin: fix for bug which was turning off plugins overriding `HTTPX::Connection#send` (such as the datadog adapter).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 0.24.2
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* besides an array, `:resolver_options` can now receive a hash for `:nameserver`, which **must** be indexed by IP family (`Socket::AF_INET6` or `Socket::AF_INET`); each group of nameservers will be used for emitting DNS queries of that iP family.
|
|
6
|
+
* `:authentication` plugin: Added `#bearer_auth` helper, which receives a token, and sets it as `"Bearer $TOKEN` in the `"authorization"` header.
|
|
7
|
+
* `faraday` adapter: now implements `#build_connection` and `#close`, will now interact with `faraday` native timeouts (`:read`, `:write` and `:connect`).
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## Bugfixes
|
|
11
|
+
|
|
12
|
+
* fixed native resolver bug when queries involving intermediate alias would be kept after the original query and mess with re-queries.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# 0.24.3
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* faraday adapter: reraise httpx timeout errors as faraday errors.
|
|
6
|
+
* faraday adapter: support `:bind` option, which expects a host and port to connect to.
|
|
7
|
+
|
|
8
|
+
## Bugfixes
|
|
9
|
+
|
|
10
|
+
* faraday adapter: fix `#close` implementation using the wrong ivar.
|
|
11
|
+
* faraday adapter: fix usage of `requestt_timeout` translation of faraday timeouts into httpx timeouts.
|
|
12
|
+
* faraday adapter: `ssl: { verify: false }` was being ignored, and certification verification was still proceeding.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 0.24.4
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* `digest_authentication` plugin now supports passing HA1hashed with password HA1s (common to store in htdigest files for example) when setting the`:hashed` kwarg to `true` in the `.digest_auth` call.
|
|
6
|
+
* ex: `http.digest_auth(user, get_hashed_passwd_from_htdigest(user), hashed: true)`
|
|
7
|
+
* TLS session resumption is now supported
|
|
8
|
+
* whenever possible, `httpx` sessions will recycle used connections so that, in the case of TLS connections, the first session will keep being reusedd, thereby diminishing the overhead of subsequent TLS handshakes on the same host.
|
|
9
|
+
* TLS sessions are only reused in the scope of the same `httpx` session, unless the `:persistent` plugin is used, in which case, the persisted `httpx` session will always try to resume TLS sessions.
|
|
10
|
+
|
|
11
|
+
## Bugfixes
|
|
12
|
+
|
|
13
|
+
* When explicitly using IP addresses in the URL host, TLS handshake will now verify tif he IP address is included in the certificate.
|
|
14
|
+
* IP address will keep not be used for SNI, as per RFC 6066, section 3.
|
|
15
|
+
* ex: `http.get("https://10.12.0.12/get")`
|
|
16
|
+
* if you want the prior behavior, set `HTTPX.with(ssl: {verify_hostname: false})`
|
|
17
|
+
* Turn TLS hostname verification on for `jruby` (it's turned off by default).
|
|
18
|
+
* if you want the prior behavior, set `HTTPX.with(ssl: {verify_hostname: false})`
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# 0.24.6
|
|
2
|
+
|
|
3
|
+
## dependencies
|
|
4
|
+
|
|
5
|
+
`http-2-next` last supported version for the 0.x series is the last version before v1. This shoul ensure that older versions of `httpx` won't be affected by any of the recent breaking changes.
|
|
6
|
+
|
|
7
|
+
## Bugfixes
|
|
8
|
+
|
|
9
|
+
* `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.
|
|
10
|
+
* `datadog` adapter has now been patched to support the most recent breaking changes of `ddtrace` configuration DSL (`env_to_bool` is no longer supported).
|