Releases: encode/httpcore
Version 0.13.2
0.13.2 (April 29th, 2021)
Added
- Improve error message for specific case of
RemoteProtocolError
where server disconnects without sending a response. (Pull #313)
Version 0.13.1
Version 0.13.0
0.13.0 (April 21st, 2021)
The 0.13 release updates the core API in order to match the HTTPX Transport API,
introduced in HTTPX 0.18 onwards.
An example of making requests with the new interface is:
with httpcore.SyncConnectionPool() as http:
status_code, headers, stream, extensions = http.handle_request(
method=b'GET',
url=(b'https', b'example.org', 443, b'/'),
headers=[(b'host', b'example.org'), (b'user-agent', b'httpcore')]
stream=httpcore.ByteStream(b''),
extensions={}
)
body = stream.read()
print(status_code, body)
Changed
- The
.request()
method is nowhandle_request()
. (Pull #296) - The
.arequest()
method is now.handle_async_request()
. (Pull #296) - The
headers
argument is no longer optional. (Pull #296) - The
stream
argument is no longer optional. (Pull #296) - The
ext
argument is now namedextensions
, and is no longer optional. (Pull #296) - The
"reason"
extension keyword is now named"reason_phrase"
. (Pull #296) - The
"reason_phrase"
and"http_version"
extensions now use byte strings for their values. (Pull #296) - The
httpcore.PlainByteStream()
class becomeshttpcore.ByteStream()
. (Pull #296)
Added
- Streams now support a
.read()
interface. (Pull #296)
Fixed
- Task cancelation no longer leaks connections from the connection pool. (Pull #305)
Version 0.12.3
0.12.3 (December 7th, 2020)
Fixed
- Abort SSL connections on close rather than waiting for remote EOF when using
asyncio
. (Pull #167) - Fix exception raised in case of connect timeouts when using the
anyio
backend. (Pull #236) - Fix
Host
header precedence for:authority
in HTTP/2. (Pull #241, #243) - Handle extra edge case when detecting for socket readability when using
asyncio
. (Pull #242, #244) - Fix
asyncio
SSL warning when using proxy tunneling. (Pull #249)
Version 0.12.2
Version 0.12.1
Version 0.12.0
0.12.0 (October 6th, 2020)
Changed
- HTTP header casing is now preserved, rather than always sent in lowercase. (#216 and python-hyper/h11#104)
Added
- Add Python 3.9 to officially supported versions.
Fixed
- Gracefully handle a stdlib asyncio bug when a connection is closed while it is in a paused-for-reading state. (#201)
Version 0.11.1
Version 0.11.0
0.11.0 (September 22nd, 2020)
The Transport API with 0.11.0 has a couple of significant changes.
Firstly we've moved changed the request interface in order to allow extensions, which will later enable us to support features
such as trailing headers, HTTP/2 server push, and CONNECT/Upgrade connections.
The interface changes from:
def request(method, url, headers, stream, timeout):
return (http_version, status_code, reason, headers, stream)
To instead including an optional dictionary of extensions on the request and response:
def request(method, url, headers, stream, ext):
return (status_code, headers, stream, ext)
Having an open-ended extensions point will allow us to add later support for various optional features, that wouldn't otherwise be supported without these API changes.
In particular:
- Trailing headers support.
- HTTP/2 Server Push
- sendfile.
- Exposing raw connection on CONNECT, Upgrade, HTTP/2 bi-di streaming.
- Exposing debug information out of the API, including template name, template context.
Currently extensions are limited to:
- request:
timeout
- Optional. Timeout dictionary. - response:
http_version
- Optional. Include the HTTP version used on the response. - response:
reason
- Optional. Include the reason phrase used on the response. Only valid with HTTP/1.*.
See encode/httpx#1274 (comment) for the history behind this.
Secondly, the async version of request
is now namespaced as arequest
.
This allows concrete transports to support both sync and async implementations on the same class.