Last Update: 2023-12-05 13:42:13 +0000



URL-encoded nested params

url encoder now supports nested params, which is a standard of rack-based frameworks:

HTTPX.post("https://httpbin.org/post", form: { a: { b: 1 }, c: [2, 3] })
# a[b]=1&c[]=2&c[]=3

This encoding scheme is now the standard for URL-encoded request bodies, query params, and :multipart plugin requests.

Socks4 IPv6 addresses

HTTPX supports IPv6 Socks4 proxies now. This support is restricted to rubies where IPAddr#hton is implemented though, so you are encouraged to upgrade.

More verbose HTTP Errors

HTTPX::Response#raise_for_status was raising exceptions for client/server HTTP errors codes (4xx/5xx). However, only the status code was part of the message.

From now on, both headers and the responnse payload will also appear, so expected more verbosity, but also more meaningful information.


  • HTTP/2 and HTTP/1.1 exhausted connections now get properly migrated into a new connection;

  • HTTP/2 421 responses will now correctly migrate the connection and pending requests to HTTP/1.1 (a hanging loop was being caused);

  • HTTP/2 connection failed with a GOAWAY settings timeout will now return error responses (instead of hanging indefinitely);

  • Non-IP proxy name-resolving errors will now move on to the next available proxy in the list (instead of hanging indefinitely);

  • Non-IP DNS resolve errors for native and https variants will now return the appropriate error response (instead of hanging indefinitely);


  • HTTPX.plugins is now officially deprecated (use HTTPX.plugin instead);