[ruby-talk:444527] [ANN] httpx 1.3.0 released

httpx 1.3.0 has been released.

HTTPX.get("https://gitlab.com/honeyryderchuck/httpx
<https://gitlab.com/honeyryderchuck/httpx>")

HTTPX is an HTTP client library for the Ruby programming language.

Among its features, it supports:

* HTTP/2 and HTTP/1.x protocol versions
* Concurrent requests by default
* Simple and chainable API
* Proxy Support (HTTP(S), CONNECT tunnel, Socks4/4a/5)
* Simple Timeout System
* Lightweight by default (require what you need)

And also:

* Compression (gzip, deflate, brotli)
* Streaming Requests
* Authentication (Basic Auth, Digest Auth, AWS Sigv4)
* Expect 100-continue
* Multipart Requests
* Cookies
* HTTP/2 Server Push
* H2C Upgrade
* Automatic follow redirects
* International Domain Names
* GRPC
* Circuit breaker
* WebDAV
* SSRF Filter
* Datadog integration
* Faraday integration
* Webmock integration
* Sentry integration

Here are the updates since the last release:

# 1.3.0

## Dependencies

`http-2` v1.0.0 is replacing `http-2-next` as the HTTP/2 parser.

`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.

## Improvements

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.

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.

## Fixes

* support for the `datadog` gem v2.0.0 in its adapter has been unblocked,
now that the gem has been released.
* loading the `:cookies` plugin was making the `Session#build_request`
private.

# 1.2.6

## Improvements

* `native` resolver: when timing out on DNS query for an alias, retry the
DNS query for the alias (instead of the original hostname).

## Bugfixes

* `faraday` adapter: set `env` options on the request object, so they are
available in the request object when yielded.
* `follow_redirects` plugin: remove body-related headers (`content-length`,
`content-type`) on POST-to-GET redirects.
* `follow_redirects` plugin: maintain verb (and body) of original request
when the response status code is 307.
* `native` resolver: when timing out on TCP-based name resolution,
downgrade to UDP before retrying.
* `rate_limiter` plugin: do not try fetching the retry-after of error
responses.

# 1.2.5

## Bugfixes

* fix for usage of correct `last-modified` header in `response_cache`
plugin.
* fix usage of decoding helper methods (i.e. `response.json`) with
`response_cache` plugin.
* `stream` plugin: reverted back to yielding buffered payloads for streamed
responses (broke `down` integration)

# 1.2.4

## Bugfixes

* fixed issue related to inability to buffer payload to error responses
(which may happen on certain error handling situations).
* fixed recovery from a lost persistent connection leaving process due to
ping being sent while still marked as inactive.
* fixed datadog integration, which was not generating new spans on retried
requests (when `:retries` plugin is enabled).
* fixed splitting strings into key value pairs in cases where the value
would contain a "=", such as in certain base64 payloads.

# 1.2.3

## Improvements

* `:retries` plugin: allow `:max_retries` set to 0 (allows for a soft
disable of retries when using the faraday adapter).

## Bugfixes

* `:oauth` plugin: fix for default auth method being ignored when setting
grant type and scope as options only.
* 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).
* native resolver cleanly transitions from tcp to udp after truncated DNS
query (causing issues on follow-up CNAME resolution).
* 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).

## Chore

* datadog adapter: do not call `.lazy` on options (avoids deprecation
warning, to be removed in ddtrace 2.0)

# 1.2.2

## Bugfixes

* only raise "unknown option" error when option is not supported, not
anymore when error happens in the setup of a support option.
* usage of `HTTPX::Session#wrap` within a thread with other sessions using
the `:persistent` plugin won't inadvertedly terminate its open connections.
* terminate connections on `IOError` (`SocketError` does not cover them).
* 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).
* `:oauth` plugin: fixing check preventing the OAuth metadata server
integration path to be exercised.
* fix instantiation of the options headers object with the wrong headers
class.

# 1.2.1

## Bugfixes

* DoH resolver: try resolving other candidates on "domain not found" error
(same behaviour as with native resolver).
* Allow HTTP/2 connections to exit cleanly when TLS session gets corrupted
and termination handshake can't be performed.