Changelog History
Page 1
-
v0.23.0 Changes
May 23, 2022🔄 Changed
- ⬇️ Drop support for Python 3.6. (#2097)
- 📚 Use
utf-8as the default character set, instead of falling back tocharset-normalizerfor auto-detection. To enable automatic character set detection, see the documentation. (#2165)
🛠 Fixed
- 🛠 Fix
URL.copy_withfor some oddly formed URL cases. (#2185) - Digest authentication should use case-insensitive comparison for determining which algorithm is being used. (#2204)
- 🛠 Fix console markup escaping in command line client. (#1866)
- 👀 When files are used in multipart upload, ensure we always seek to the start of the file. (#2065)
- Ensure that
iter_bytesnever yields zero-length chunks. (#2068) - ⬆️ Preserve
Authorizationheader for redirects that are to the same origin, but are anhttp-to-httpsupgrade. (#2074) - 🖨 When responses have binary output, don't print the output to the console in the command line client. Use output like
<16086 bytes of binary data>instead. (#2076) - 🛠 Fix display of
--proxiesargument in the command line client help. (#2125) - Close responses when task cancellations occur during stream reading. (#2156)
- 🛠 Fix type error on accessing
.requestonHTTPErrorexceptions. (#2158)
-
v0.22.0 Changes
January 26, 2022➕ Added
- 👌 Support for the SOCKS5 proxy protocol via the
socksiopackage. (#2034) - 👌 Support for custom headers in multipart/form-data requests (#1936)
🛠 Fixed
- Don't perform unreliable close/warning on
__del__with unclosed clients. (#2026) - 🛠 Fix
Headers.update(...)to correctly handle repeated headers (#2038)
- 👌 Support for the SOCKS5 proxy protocol via the
-
v0.21.3 Changes
January 06, 2022🛠 Fixed
- 🛠 Fix streaming uploads using
SyncByteStreamorAsyncByteStream. Regression in 0.21.2. (#2016)
- 🛠 Fix streaming uploads using
-
v0.21.2 Changes
January 05, 2022🛠 Fixed
- 👍 HTTP/2 support for tunnelled proxy cases. (#2009)
- 👌 Improved the speed of large file uploads. (#1948)
-
v0.21.1 Changes
November 16, 2021🛠 Fixed
- The
response.urlproperty is now correctly annotated asURL, instead ofOptional[URL]. (#1940)
- The
-
v0.21.0 Changes
November 15, 2021🚀 The 0.21.0 release integrates against a newly redesigned
httpcorebackend.⚡️ Both packages ought to automatically update to the required versions, but if you are seeing any issues, you should ensure that you have
httpx==0.21.*andhttpcore==0.14.*installed.➕ Added
- The command-line client will now display connection information when
-v/--verboseis used. - The command-line client will now display server certificate information when
-v/--verboseis used. - The command-line client is now able to properly detect if the outgoing request should be formatted as HTTP/1.1 or HTTP/2, based on the result of the HTTP/2 negotiation.
✂ Removed
- 👍 Curio support is no longer currently included. Please get in touch if you require this, so that we can assess priorities.
- The command-line client will now display connection information when
-
v0.20.0 Changes
October 13, 2021🚀 The 0.20.0 release adds an integrated command-line client, and also includes some design changes. The most notable of these is that redirect responses are no longer automatically followed, unless specifically requested.
This design decision prioritises a more explicit approach to redirects, in order to avoid code that unintentionally issues multiple requests as a result of misconfigured URLs.
🔧 For example, previously a client configured to send requests to
http://api.github.com/would end up sending every API request twice, as each request would be redirected tohttps://api.github.com/.🔧 If you do want auto-redirect behaviour, you can enable this either by configuring the client instance with
Client(follow_redirects=True), or on a per-request basis, with.get(..., follow_redirects=True).This change is a classic trade-off between convenience and precision, with no "right" 👀 answer. See discussion #1785 for more context.
⚡️ The other major design change is an update to the Transport API, which is the low-level interface against which requests are sent. Previously this interface used only primitive datastructures, like so...
(status_code, headers, stream, extensions) = transport.handle_request(method, url, headers, stream, extensions) try ... finally: stream.close()Now the interface is much simpler...
response = transport.handle_request(request) try ... finally: response.close()🔄 Changed
- The
allow_redirectsflag is nowfollow_redirectsand defaults toFalse. - The
raise_for_status()method will now raise an exception for any responses except those with 2xx status codes. Previously only 4xx and 5xx status codes would result in an exception. - The low-level transport API changes to the much simpler
response = transport.handle_request(request). - ⏱ The
client.send()method no longer accepts atimeout=...argument, but theclient.build_request()does. This required by the signature change of the Transport API. The request timeout configuration is now stored on the request instance, asrequest.extensions['timeout'].
➕ Added
- ➕ Added the
httpxcommand-line client. - Response instances now include
.is_informational,.is_success,.is_redirect,.is_client_error, and.is_server_errorproperties for checking 1xx, 2xx, 3xx, 4xx, and 5xx response types. Note that the behaviour of.is_redirectis slightly different in that it now returns True for all 3xx responses, in order to allow for a consistent set of properties onto the different HTTP status code types. Theresponse.has_redirect_locationlocation may be used to determine responses with properly formed URL redirects.
🛠 Fixed
response.iter_bytes()no longer raises a ValueError when called on a response with no content. (Pull #1827)- 🔧 The
'wsgi.error'configuration now defaults tosys.stderr, and is corrected to be aTextIOinterface, not aBytesIOinterface. Additionally, the WSGITransport now accepts awsgi_errorconfiguration. (Pull #1828) - Follow the WSGI spec by properly closing the iterable returned by the application. (Pull #1830)
- The
-
v0.19.0 Changes
August 19, 2021➕ Added
- ➕ Add support for
Client(allow_redirects=<bool>). (Pull #1790) - ➕ Add automatic character set detection, when no
charsetis included in the responseContent-Typeheader. (Pull #1791)
🔄 Changed
- Event hooks are now also called for any additional redirect or auth requests/responses. (Pull #1806)
- Strictly enforce that upload files must be opened in binary mode. (Pull #1736)
- Strictly enforce that client instances can only be opened and closed once, and cannot be re-opened. (Pull #1800)
- ⬇️ Drop
modeargument fromhttpx.Proxy(..., mode=...). (Pull #1795)
- ➕ Add support for
-
v0.18.2 Changes
June 17, 2021➕ Added
- 👌 Support for Python 3.10. (Pull #1687)
- Expose
httpx.USE_CLIENT_DEFAULT, used as the default toauthandtimeoutparameters in request methods. (Pull #1634) - 👌 Support HTTP/2 "prior knowledge", using
httpx.Client(http1=False, http2=True). (Pull #1624)
🛠 Fixed
- ⚠ Clean up some cases where warnings were being issued. (Pull #1687)
- Prefer Content-Length over Transfer-Encoding: chunked for content= cases. (Pull #1619)
-
v0.18.1 Changes
April 29, 2021🔄 Changed
- ⚡️ Update brotli support to use the
brotlicffipackage (Pull #1605) - Ensure that
Request(..., stream=...)does not auto-generate any headers on the request instance. (Pull #1607)
🛠 Fixed
- ⏱ Pass through
timeout=...in top-level httpx.stream() function. (Pull #1613) - Map httpcore transport close exceptions to httpx exceptions. (Pull #1606)
- ⚡️ Update brotli support to use the