[ANN] httpx 0.10.0 released

httpx 0.10.0 has been released.

HTTPX.get("HoneyryderChuck / httpx · GitLab
<HoneyryderChuck / httpx · GitLab>")

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)
* Expect 100-continue
* Multipart Requests
* Cookies
* HTTP/2 Server Push
* H2C Upgrade
* Automatic follow redirects
* International Domain Names

These are the announcements since the last update:

# 0.10.0

## Features

### Streaming Requests

The `stream` plugin adds functionality to handle long-lived stream
responses, such as the Twitter Streaming API:

http = HTTPX.plugin(:stream)

http.get(stream_api_endpoint, stream: true).each_line do |line|
  payload = JSON.parse(line)
  # do smth with this
end

### Rate Limiter

The `rate_limiter` plugin adds functionality for automatically hooking into
rate-limiting responses coming from the server, and waits-and-retries them
according to what the server advertises.

HTTPX.plugin(:rate_limiter).get(rate_limited_api_endpoint)
# => 429 Too Many Requests .... Retry-After: 3
# waits 3 seconds before retrying

### Ruby 3

This release is the first testing against and targeting Ruby 3 and some of
the new features.

It ships with RBS signatures for all of the client-facing APIs. There's non
100% typinng coverage yet, but I'm gradually (pun intended) working on it.

## Improvements

### IDN support

Requests where the domains are formed by non-ASCII characters, are now
supported (if you're using ruby 2.3 or more recent).

HTTPX.get("http://bücher.ch <http://xn--bcher-kva.ch>") # it works!

### cookies plugin full implementation

The `cookies` plugin is now independent of 3rd-party gems. The motivation
for this was that `http-cookie` was dependent of both `domain_name` and
`unf` gems, which are currently unusable in ruby 3, and haven't received
any update in the last 3 years.

The implementation is still compliant with RFC6265, and all of the features
provided in earlier versions were ported, exceptwhen loading the cookie jar
stored in a Netscape-format file or Mozilla sqlite database, which were not
documented for `httpx` anyway, and I considered too niche to backport. If
you feel `httpx` should support those, do let me know.

Some code from these gems, including the ruby punycode implementation, is
now part of the source tree, along with its licenses and attribution
mentions.

## Bugfixes

Several edge-case bugs have been fixed solely by the integration of RBS
runtime type checking, including some bugs around closing a connection pool
that can cause loops.

## Regressions

`HTTPX::ErrorResponse`'s methods `#headers` and `#reason` were removed, as
they didn't provide much value. Consider calling `#raise_for_status` or
checking the API (`is_a?(HTTPX::ErrorResponse)` or `respond_to?(:error)`
are strategies for this).