[ANN] httpx 0.18.4 released

httpx 0.18.1 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), 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

# 0.18.4

## Improvements

* faraday adapter: added support for `#on_data` callback in order to
support [faraday streaming](
Streaming Responses | Faraday).

* multipart plugin: removed support for file mime type detection using
`mime-types`. The reasoning behind it was that `mime-types` uses the
filename, which is a very inaccurate detection strategy (ex: an mp4 video
will be identified as `application/mp4`, instead of the correct
`video/mp4`).
* multipart plugin: supported for file mime type detection using `marcel`
and `filemagic` was added. Both use the magic header bytes, which is a more
accurate strategy for file type detection.

## Bugfixes

* webmock adapter has been reimplemented to work with `httpx` plugins (such
as the `:retries` plugin). Some other fixes were applied to make it work
better under `vcr` (a common `webmock` extension).

* fixed the URI-related bug which was making requests stall under ruby 3.1
(still not officially testing against it).

# 0.18.3

## Bugfixes

* request bodies eager-loaded from enumerables yield duped partial chunks.

An error was observed while looking at webmock integration, where requests
formed via the multipart plugin were returning an empty string as body. The
issue was caused by an optimization on multipart encoder, which reuses the
same buffer when reading chunks. Unfortunately, these cannot be yielded the
same way via IO.copy_stream, as the same (cleared) buffer will be used to
generate the eager-loaded body chunks.

# 0.18.2

## Bugfixes

* A bug was reported and fixed, whereby a persistent connection with a
`:total_timeout` set was triggering the timeout and leaving the process
looping indefinitely.

## Chore

The quirk of using the `:persistent` plugin with `:total_timeout` has been
documented:
Timeouts · Wiki · HoneyryderChuck / httpx · GitLab.