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,8 @@
|
|
|
1
|
+
# 1.2.4
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* fixed issue related to inability to buffer payload to error responses (which may happen on certain error handling situations).
|
|
6
|
+
* fixed recovery from a lost persistent connection leaving process due to ping being sent while still marked as inactive.
|
|
7
|
+
* fixed datadog integration, which was not generating new spans on retried requests (when `:retries` plugin is enabled).
|
|
8
|
+
* fixed splitting strings into key value pairs in cases where the value would contain a "=", such as in certain base64 payloads.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 1.2.5
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* fix for usage of correct `last-modified` header in `response_cache` plugin.
|
|
6
|
+
* fix usage of decoding helper methods (i.e. `response.json`) with `response_cache` plugin.
|
|
7
|
+
* `stream` plugin: reverted back to yielding buffered payloads for streamed responses (broke `down` integration)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# 1.2.6
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* `native` resolver: when timing out on DNS query for an alias, retry the DNS query for the alias (instead of the original hostname).
|
|
6
|
+
|
|
7
|
+
## Bugfixes
|
|
8
|
+
|
|
9
|
+
* `faraday` adapter: set `env` options on the request object, so they are available in the request object when yielded.
|
|
10
|
+
* `follow_redirects` plugin: remove body-related headers (`content-length`, `content-type`) on POST-to-GET redirects.
|
|
11
|
+
* `follow_redirects` plugin: maintain verb (and body) of original request when the response status code is 307.
|
|
12
|
+
* `native` resolver: when timing out on TCP-based name resolution, downgrade to UDP before retrying.
|
|
13
|
+
* `rate_limiter` plugin: do not try fetching the retry-after of error responses.
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# 1.3.0
|
|
2
|
+
|
|
3
|
+
## Dependencies
|
|
4
|
+
|
|
5
|
+
`http-2` v1.0.0 is replacing `http-2-next` as the HTTP/2 parser.
|
|
6
|
+
|
|
7
|
+
`http-2-next` was forked from `http-2` 5 years ago; its improvements have been merged back to `http-2` recently though, so `http-2-next` willl therefore no longer be maintained.
|
|
8
|
+
|
|
9
|
+
## Improvements
|
|
10
|
+
|
|
11
|
+
Request-specific options (`:params`, `:form`, `:json` and `:xml`) are now separately kept by the request, which allows them to share `HTTPX::Options`, and reduce the number of copying / allocations.
|
|
12
|
+
|
|
13
|
+
This means that `HTTPX::Options` will throw an error if you initialize an object which such keys; this should not happen, as this class is considered internal and you should not be using it directly.
|
|
14
|
+
|
|
15
|
+
## Fixes
|
|
16
|
+
|
|
17
|
+
* support for the `datadog` gem v2.0.0 in its adapter has been unblocked, now that the gem has been released.
|
|
18
|
+
* loading the `:cookies` plugin was making the `Session#build_request` private.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 1.3.1
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* `:request_timeout` will be applied to all HTTP interactions until the final responses returned to the caller. That includes:
|
|
6
|
+
* all redirect requests/responses (when using the `:follow_redirects` plugin)
|
|
7
|
+
* all retried requests/responses (when using the `:retries` plugin)
|
|
8
|
+
* intermediate requests (such as "100-continue")
|
|
9
|
+
* faraday adapter: allow further plugins of internal session (ex: `builder.adapter(:httpx) { |sess| sess.plugin(:follow_redirects) }...`)
|
|
10
|
+
|
|
11
|
+
## Bugfixes
|
|
12
|
+
|
|
13
|
+
* fix connection leak on proxy auth failed (407) handling
|
|
14
|
+
* fix busy loop on deferred requests for the duration interval
|
|
15
|
+
* do not further enqueue deferred requests if they have terminated meanwhile.
|
|
16
|
+
* fix busy loop caused by coalescing connections when one of them is on the DNS resolution phase still.
|
|
17
|
+
* faraday adapter: on parallel mode, skip calling `on_complete` when not defined.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 1.3.2
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* Prevent `NoMethodError` in an edge case when the `:proxy` plugin is autoloaded via env vars and webmock adapter are used in tandem, and a real request fails.
|
|
6
|
+
* raise invalid uri error if passed request uri does not contain the host part (ex: `"https:/get"`)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# 1.4.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:content_digest` plugin
|
|
6
|
+
|
|
7
|
+
The `:content_digest` can be used to calculate the digest of request payloads and set them in the `"content-digest"` header; it can also validate the integrity of responses which declare the same `"content-digest"` header.
|
|
8
|
+
|
|
9
|
+
More info under https://honeyryderchuck.gitlab.io/httpx/wiki/Content-Digest
|
|
10
|
+
|
|
11
|
+
## Per-session connection pools
|
|
12
|
+
|
|
13
|
+
This architectural changes moves away from per-thread shared connection pools, and into per-session (also thread-safe) connection pools. Unlike before, this enables connections from a session to be reused across threads, as well as limiting the number of connections that can be open on a given origin peer. This fixes long-standing issues, such as reusing connections under a fiber scheduler loop (such as the one from the gem `async`).
|
|
14
|
+
|
|
15
|
+
A new `:pool_options` option is introduced, which can be passed an hash with the following sub-options:
|
|
16
|
+
|
|
17
|
+
* `:max_connections_per_origin`: maximum number of connections a pool allows (unbounded by default, for backwards compatibility).
|
|
18
|
+
* `:pool_timeout`: the number of seconds a session will wait for a connection to be checked out (default: 5)
|
|
19
|
+
|
|
20
|
+
More info under https://honeyryderchuck.gitlab.io/httpx/wiki/Connection-Pools
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## Improvements
|
|
24
|
+
|
|
25
|
+
* `:aws_sigv4` plugin: improved digest calculation on compressed request bodies by buffering content to a tempfile.
|
|
26
|
+
* `HTTPX::Response#json` will parse payload from extended json MIME types (like `application/ld+json`, `application/hal+json`, ...).
|
|
27
|
+
|
|
28
|
+
## Bugfixes
|
|
29
|
+
|
|
30
|
+
* `:aws_sigv4` plugin: do not try to rewind a request body which yields chunks.
|
|
31
|
+
* fixed request encoding when `:json` param is passed, and the `oj` gem is used (by using the `:compat` flag).
|
|
32
|
+
* native resolver: on message truncation, bubble up tcp handshake errors as resolve errors.
|
|
33
|
+
* allow `HTTPX::Response#json` to accept extended JSON mime types (such as responses with `content-type: application/ld+json`)
|
|
34
|
+
|
|
35
|
+
## Chore
|
|
36
|
+
|
|
37
|
+
* default options are now fully frozen (in case anyone relies on overriding them).
|
|
38
|
+
|
|
39
|
+
### `:xml` plugin
|
|
40
|
+
|
|
41
|
+
XML encoding/decoding (via `:xml` request param, and `HTTPX::Response#xml`) is now available via the `:xml` plugin.
|
|
42
|
+
|
|
43
|
+
Using `HTTPX::Response#xml` without the plugin will issue a deprecation warning.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# 1.4.1
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* several `datadog` integration bugfixes
|
|
6
|
+
* only load the `datadog` integration when the `datadog` sdk is loaded (and not other gems that may define the `Datadog` module, like `dogstatsd`)
|
|
7
|
+
* do not trace if datadog integration is loaded but disabled
|
|
8
|
+
* distributed headers are now sent along (when the configuration is enabled, which it is by default)
|
|
9
|
+
* fix for handling multiple `GOAWAY` frames coming from the server (node.js servers seem to send multiple frames on connection timeout)
|
|
10
|
+
* fix regression for when a url is used with `httpx` which is not `http://` or `https://` (should raise `HTTPX::UnsupportedSchemaError`)
|
|
11
|
+
* worked around `IO.copy_stream` which was emitting incorrect bytes for HTTP/2 requests which bodies larger than the maximum supported frame size.
|
|
12
|
+
* multipart requests: make sure that a body declared as `Pathname` is opened for reading in binary mode.
|
|
13
|
+
* `webmock` integration: ensure that request events are emitted (such as plugins and integrations relying in it, such as `datadog` and the OTel integration)
|
|
14
|
+
* native resolver: do not propagate successful name resolutions for connections which were already closed.
|
|
15
|
+
* native resolver: fixed name resolution stalling, in a multi-request to multi-origin scenario, when a resolution timeout would happen.
|
|
16
|
+
|
|
17
|
+
## Chore
|
|
18
|
+
|
|
19
|
+
* refactor of the happy eyeballs and connection coalescing logic to not rely on callbacks, and instead on instance variable management (makes code more straightforward to read).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# 1.4.2
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* faraday: use default reason when none is matched by Net::HTTP::STATUS_CODES
|
|
6
|
+
* native resolver: keep sending DNS queries if the socket is available, to avoid busy loops on select
|
|
7
|
+
* native resolver fixes for Happy Eyeballs v2
|
|
8
|
+
* do not apply resolution delay if the IPv4 IP was not resolved via DNS
|
|
9
|
+
* ignore ALIAS if DNS response carries IP answers
|
|
10
|
+
* do not try to query for names already awaiting answer from the resolver
|
|
11
|
+
* make sure all types of errors are propagated to connections
|
|
12
|
+
* make sure next candidate is picked up if receiving NX_DOMAIN_NOT_FOUND error from resolver
|
|
13
|
+
* raise error happening before any request is flushed to respective connections (avoids loop on non-actionable selector termination).
|
|
14
|
+
* fix "NoMethodError: undefined method `after' for nil:NilClass", happening for requests flushed into persistent connections which errored, and were retried in a different connection before triggering the timeout callbacks from the previously-closed connection.
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## Chore
|
|
18
|
+
|
|
19
|
+
* Refactor of timers to allow for explicit and more performant single timer interval cancellation.
|
|
20
|
+
* default log message restructured to include info about process, thread and caller.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 1.4.3
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* `webmock` adapter: reassign headers to signature after callbacks are called (these may change the headers before virtual send).
|
|
6
|
+
* do not close request (and its body) right after sending, instead only on response close
|
|
7
|
+
* prevents retries from failing under the `:retries` plugin
|
|
8
|
+
* fixes issue when using `faraday-multipart` request bodies
|
|
9
|
+
* retry request with HTTP/1 when receiving an HTTP/2 GOAWAY frame with `HTTP_1_1_REQUIRED` error code.
|
|
10
|
+
* fix wrong method call on HTTP/2 PING frame with unrecognized code.
|
|
11
|
+
* fix EOFError issues on connection termination for long running connections which may have already been terminated by peer and were wrongly trying to complete the HTTP/2 termination handshake.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# 1.4.4
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* `:stream` plugin: response will now be partially buffered in order to i.e. inspect response status or headers on the response body without buffering the full response
|
|
6
|
+
* this fixes an issue in the `down` gem integration when used with the `:max_size` option.
|
|
7
|
+
* do not unnecessarily probe for connection liveness if no more requests are inflight, including failed ones.
|
|
8
|
+
* when using persistent connections, do not probe for liveness right after reconnecting after a keep alive timeout.
|
|
9
|
+
|
|
10
|
+
## Bugfixes
|
|
11
|
+
|
|
12
|
+
* `:persistent` plugin: do not exhaust retry attempts when probing for (and failing) connection liveness.
|
|
13
|
+
* since the introduction of per-session connection pools, and consequentially due to the possibility of multiple inactive connections for the same origin being in the pool, which may have been terminated by the peer server, requests would fail before being able to establish a new connection.
|
|
14
|
+
* prevent retrying to connect the TCP socket object when an SSLSocket object is already in place and connecting.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# 1.5.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:stream_bidi` plugin
|
|
6
|
+
|
|
7
|
+
The `:stream_bidi` plugin enables bidirectional streaming support (an HTTP/2 only feature!). It builds on top of the `:stream` plugin, and uses its block-based syntax to process incoming frames, while allowing the user to pipe more data to the request (from the same, or another thread/fiber).
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
http = HTTPX.plugin(:stream_bidi)
|
|
11
|
+
request = http.build_request(
|
|
12
|
+
"POST",
|
|
13
|
+
"https://your-origin.com/stream",
|
|
14
|
+
headers: { "content-type" => "application/x-ndjson" },
|
|
15
|
+
body: ["{\"message\":\"started\"}\n"]
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
chunks = []
|
|
19
|
+
|
|
20
|
+
response = http.request(request, stream: true)
|
|
21
|
+
|
|
22
|
+
Thread.start do
|
|
23
|
+
response.each do |chunk|
|
|
24
|
+
handle_data(chunk)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
# now send data...
|
|
29
|
+
request << "{\"message\":\"foo\"}\n"
|
|
30
|
+
request << "{\"message\":\"bar\"}\n"
|
|
31
|
+
# ...
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Stream-Bidi
|
|
35
|
+
|
|
36
|
+
### `:query` plugin
|
|
37
|
+
|
|
38
|
+
The `:query` plugin adds public methods supporting the `QUERY` HTTP verb:
|
|
39
|
+
|
|
40
|
+
```ruby
|
|
41
|
+
http = HTTPX.plugin(:query)
|
|
42
|
+
|
|
43
|
+
http.query("https://example.com/gquery", body: "foo=bar") # QUERY /gquery ....
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Query
|
|
47
|
+
|
|
48
|
+
this functionality was added as a plugin for explicit opt-in, as it's experimental (RFC for the new HTTP verb is still in draft).
|
|
49
|
+
|
|
50
|
+
### `:response_cache` plugin filesystem based store
|
|
51
|
+
|
|
52
|
+
The `:response_cache` plugin supports setting the filesystem as the response cache store (instead of just storing them in memory, which is the default `:store`).
|
|
53
|
+
|
|
54
|
+
```ruby
|
|
55
|
+
# cache store in the filesystem, writes to the temporary directory from the OS
|
|
56
|
+
http = HTTPX.plugin(:response_cache, response_cache_store: :file_store)
|
|
57
|
+
# if you want a separate location
|
|
58
|
+
http = HTTPX.plugin(:response_cache).with(response_cache_store: HTTPX::Plugins::ResponseCache::FileStore.new("/path/to/dir"))
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Response-Cache#:file_store
|
|
62
|
+
|
|
63
|
+
### `:close_on_fork` option
|
|
64
|
+
|
|
65
|
+
A new option `:close_on_fork` can be used to ensure that a session object which may have open connections will not leak them in case the process is forked (this can be the case of `:persistent` plugin enabled sessions which have add usage before fork):
|
|
66
|
+
|
|
67
|
+
```ruby
|
|
68
|
+
http = HTTPX.plugin(:persistent, close_on_fork: true)
|
|
69
|
+
|
|
70
|
+
# http may have open connections here
|
|
71
|
+
fork do
|
|
72
|
+
# http has no connections here
|
|
73
|
+
end
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Connection-Pools#Fork-Safety .
|
|
77
|
+
|
|
78
|
+
### `:debug_redact` option
|
|
79
|
+
|
|
80
|
+
The `:debug_redact` option will, when enabled, replace parts of the debug logs (enabled via `:debug` and `:debug_level` options) which may contain sensitive information, with the `"[REDACTED]"` placeholder.
|
|
81
|
+
|
|
82
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Debugging .
|
|
83
|
+
|
|
84
|
+
### `:max_connections` pool option
|
|
85
|
+
|
|
86
|
+
A new `:max_connections` pool option (settable under `:pool_options`) can be used to defined the maximum number **overall** of connections for a pool ("in-transit" or "at-rest"); this complements, and supersedes when used, the already existing `:max_connections_per_origin`, which does the same per connection origin.
|
|
87
|
+
|
|
88
|
+
```ruby
|
|
89
|
+
HTTPX.with(pool_options: { max_connections: 100 })
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Connection-Pools .
|
|
93
|
+
|
|
94
|
+
### Subplugins
|
|
95
|
+
|
|
96
|
+
An enhancement to the plugins architecture, it allows plugins to define submodules ("subplugins") which are loaded if another plugin is in use, or is loaded afterwards.
|
|
97
|
+
|
|
98
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Custom-Plugins#Subplugins .
|
|
99
|
+
|
|
100
|
+
## Improvements
|
|
101
|
+
|
|
102
|
+
* `:persistent` plugin: several improvements around reconnections of failure:
|
|
103
|
+
* reconnections will only happen for "connection broken" errors (and will discard reconnection on timeouts)
|
|
104
|
+
* reconnections won't exhaust retries
|
|
105
|
+
* `:response_cache` plugin: several improements:
|
|
106
|
+
* return cached response if not stale, send conditional request otherwise (it was always doing the latter).
|
|
107
|
+
* consider immutable (i.e. `"Cache-Control: immutable"`) responses as never stale.
|
|
108
|
+
* `:datadog` adapter: decorate spans with more tags (header, kind, component, etc...)
|
|
109
|
+
* timers operations have been improved to use more efficient algorithms and reduce object creation.
|
|
110
|
+
|
|
111
|
+
## Bugfixes
|
|
112
|
+
|
|
113
|
+
* ensure that setting request timeouts happens before the request is buffered (the latter could trigger a state transition required by the former).
|
|
114
|
+
* `:response_cache` plugin: fix `"Vary"` header handling by supporting a new plugin option, `:supported_vary_headers`, which defines which headers are taken into account for cache key calculation.
|
|
115
|
+
* fixed query string encoded value when passed an empty hash to the `:query` param and the URL already contains query string.
|
|
116
|
+
* `:callbacks` plugin: ensure the callbacks from a session are copied when a new session is derived from it (via a `.plugin` call, for example).
|
|
117
|
+
* `:callbacks` plugin: errors raised from hostname resolution should bubble up to user code.
|
|
118
|
+
* fixed connection coalescing selector monitoring in cases where the coalescable connecton is cloned, while other branches were simplified.
|
|
119
|
+
* clear the connection write buffer in corner cases where the remaining bytes may be interpreted as GOAWAY handshake frame (and may cause unintended writes to connections already identified as broken).
|
|
120
|
+
* remove idle connections from the selector when an error happens before the state changes (this may happen if the thread is interrupted during name resolution).
|
|
121
|
+
|
|
122
|
+
## Chore
|
|
123
|
+
|
|
124
|
+
`httpx` makes extensive use of features introduced in ruby 3.4, such as `Module#set_temporary_name` for otherwise plugin-generated anonymous classes (improves debugging and issue reporting), or `String#append_as_bytes` for a small but non-negligible perf boost in buffer operations. It falls back to the previous behaviour when used with ruby 3.3 or lower.
|
|
125
|
+
|
|
126
|
+
Also, and in preparation for the incoming ruby 3.5 release, dependency of the `cgi` gem (which will be removed from stdlib) was removed.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# 1.5.1
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* connection errors on persistent connections which have just been checked out from the pool no longer account for retries bookkeeping; the assumption should be that, if a connection has been checked into the pool in an open state, chances are, when it eventually gets checked out, it may be corrupt. This issue was more exacerbated in `:persistent` plugin connections, which by design have a retry of 1, thus failing often immediately after check out without a legitimate request try.
|
|
6
|
+
* native resolver: fix issue with process interrupts during DNS request, which caused a busy loop when closing the selector.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# 1.6.0
|
|
2
|
+
|
|
3
|
+
## Features
|
|
4
|
+
|
|
5
|
+
### `:fiber_concurrency` plugin
|
|
6
|
+
|
|
7
|
+
While simple use cases of `httpx` being used inside a fiber scheduler (such as [async](github.com/socketry/async)) worked, a serious of issues were identified when connections were reused across fibers for multiple requests (such as when using the `:persistent` plugin). The `:fiber_concurrency` plugin fixes that, by bookkeeping which requests are being used in which fibers in order to avoid spurious wakeups and busy loops.
|
|
8
|
+
|
|
9
|
+
This plugin is loaded by default when using the `:persistent` plugin, and by extension the `faraday` adapter.
|
|
10
|
+
|
|
11
|
+
You can read more about it in https://honeyryderchuck.gitlab.io/httpx/wiki/Fiber-Concurrency
|
|
12
|
+
|
|
13
|
+
## Improvements
|
|
14
|
+
|
|
15
|
+
* proxy errors are now retriable (when using the `:retries` plugin alongside the `:proxy` plugin).
|
|
16
|
+
* several options improvements:
|
|
17
|
+
* improve initialization by caching options names in the class, which facilitates predictable option ivar initialization, which avoids "too many shapes" performance penalty.
|
|
18
|
+
* when using `HTTPX::Options#merge`, enforce usage of Hash or `HTTPX::Options` object as the argument to merge with, instead of silently ignoring when none of the former.
|
|
19
|
+
* `option_` setter methods are now private.
|
|
20
|
+
* all options ivars are frozen on initialize, which enforces the immutability guarantees (**note**: in case you were relying on it not being truly mutable, this may break your code. Try either passing immutable values to options, or instead use procs).
|
|
21
|
+
* several selector loop improvements:
|
|
22
|
+
* move selectable checks a layer above to avoid calling `IO.select` with a single socket at all costs.
|
|
23
|
+
* Improve connection interest calculation to reduce spurious wakeups.
|
|
24
|
+
* skip early when finding closed selectables
|
|
25
|
+
* improve connection initialization to avoid "too many shapes" performance penalty.
|
|
26
|
+
* Plugins are now able to extend the functionality of both HTTP1 and HTTP2 connections, as well as resolvers.
|
|
27
|
+
* see instructions in the [custom lugins wiki](https://gitlab.com/os85/httpx/-/wikis/Custom-Plugins).
|
|
28
|
+
* IP addresses which have expired their TTL (from the respective DNS answer) will be invalidated and force a new name resolution on operations requiring it, such as reconnections or cache lookups.
|
|
29
|
+
* connections are removed from errors which store it internally (for internal purposes) before returning the respective error response (so that it can be garbage collected).
|
|
30
|
+
|
|
31
|
+
## Bugfixes
|
|
32
|
+
|
|
33
|
+
* remove check for non-unique local ipv6 which was preventing Happy Eyeballs v2 from kicking in.
|
|
34
|
+
* recover from "network unreachable" errors triggered by using a cached IP.
|
|
35
|
+
* dealing with requests which are rerouted for retries in the main session response handling loop.
|
|
36
|
+
* `datadog` adapter: compatibility with support versions under 1.13.0 is working again.
|
|
37
|
+
* http2 connection: fix calculation when connection closes and there's no termination handshake
|
|
38
|
+
* `callback_for`: check for existence of ivar `@callbacks` first.
|
|
39
|
+
* native resolver: do not buffer DNS query if waiting on a previous reply (even across fibers).
|
|
40
|
+
* http2: do not allow deactivating connections which finished all requests but are still waiting for the ack of the PING frame (which can happen in a multi-fiber usage scenario).
|
|
41
|
+
* pool: fix when connection is acquired after waiting on it; return it immediately, instead of bookkeeping on `:max_connections` (when defined).
|
|
42
|
+
* session: fix deactivation flow, when connections get deregistered from selector and removed from the array being iterated on.
|
|
43
|
+
* `:proxy` plugin: fix ssl reconnection such as, on close, the IO downgrades to the respective tcp socket, so that reconnection handshake starts from scratch with the original IO.
|
|
44
|
+
* `:persistent` plugin: calling `HTTPX::Session#close` will close selectors from other threads (instead of just the thread it was called on).
|
|
45
|
+
* `:callbacks` plugin: propagate callbacks to "derived-via `.plugin`" sessions.
|
|
46
|
+
* `:callbacks` plugin: do not trigger the `on_response_completed` callback if there was an error (as that's what the `on_request_error` callback is for).
|
|
47
|
+
|
|
48
|
+
## Chore
|
|
49
|
+
|
|
50
|
+
* decoupled form and multipart transcoders, moved "form or multipart" check to request body.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 1.6.1
|
|
2
|
+
|
|
3
|
+
## Improvements
|
|
4
|
+
|
|
5
|
+
* `:oauth` plugin: `.oauth_session` can be called with an `:audience` parameter, which has the effect of adding it as an extra form body parameter of the token request.
|
|
6
|
+
|
|
7
|
+
## Bugfixes
|
|
8
|
+
|
|
9
|
+
* options: when freezing the options, skip freezing `:debug`; it's usually a file/IO/stream object (stdout, stderr...), which makes it error when log messages are written.
|
|
10
|
+
* tcp: fixed adding IPv6 addresses to a tcp object when IPv4 connection probe is ongoing so that the next try uses the first ipv6 address.
|
|
11
|
+
* tcp: reorder addresses on reconnection, so ipv6 is tried first in case it is still valid.
|
|
12
|
+
* tcp: make sure ip index is decremented on error, so the next tried IP may be a valid one.
|
|
13
|
+
* tcp: do not reattempt connecting if there are no available addresses to connect. This may happen in a fiber-aware context, where fiber A waits on connection, fiber B reconnects as a result on an error or GOAWAY frame and waits on the resolver DNS answer, and when context is passed back to fiber B, it should go back to the invalidate the response and try again while waiting on the resolver as well.
|
|
14
|
+
* ssl: on connection coalescing, do not merge the ssl sessions, as these are frozen post-initialization.
|
|
15
|
+
* http2: all received GOAWAY frames emit goaway error and teardown the connection independent of the error code (it was only doing it for `:noerror`, but others may appear).
|
|
16
|
+
* do not check at require time whether the network is multi-homed; instead, defer it to first use and cache (this can break environments which block access to certain syscalls during boot time).
|
|
17
|
+
* options: do not ignore when user sets `:ip_families` in name resolution.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# 1.6.2
|
|
2
|
+
|
|
3
|
+
## Bugfixes
|
|
4
|
+
|
|
5
|
+
* revert of behaviour introduced in 1.6.1 around handling of `:ip_families` for name resolution.
|
|
6
|
+
* when no option is passed, do not assume no IPv6 connectivity if no available non-local IP is found, as the local network may still be reachable under `[::]`.
|
|
7
|
+
* bail out connection if the tcp connection was established but the ssl session failed.
|
|
8
|
+
* when alpn negotiation succeeded, this could still initialize the HTTP/2 connection and put bytes in the buffer, which would cause a busy loop trying to write to a non-open socket.
|
|
9
|
+
* datadog: fix initialization of spans in non-connection related errors
|
|
10
|
+
* past code was relying on the error being around DNS, but other errors could pop; the fix was moving the init time setup early to the session, when a request is first passed ot the associated connection.
|
|
11
|
+
* it can also fail earlier, so provide a workaround for that as well.
|