Changelog History
Page 3
-
v0.15.0 Changes
September 22, 2020โ Added
- โ Added support for curio. (Pull https://github.com/encode/httpcore/pull/168)
- โ Added support for event hooks. (Pull #1246)
- โ Added support for authentication flows which require either sync or async I/O. (Pull #1217)
- Added support for monitoring download progress with
response.num_bytes_downloaded
. (Pull #1268) - โ Added
Request(content=...)
for byte content, instead of overloadingRequest(data=...)
(Pull #1266) - โ Added support for all URL components as parameter names when using
url.copy_with(...)
. (Pull #1285) - 0๏ธโฃ Neater split between automatically populated headers on
Request
instances, vs defaultclient.headers
. (Pull #1248) - โ Unclosed
AsyncClient
instances will now raise warnings if garbage collected. (Pull #1197) - ๐ Support
Response(content=..., text=..., html=..., json=...)
for creating usable response instances in code. (Pull #1265, #1297) - ๐ Support instantiating requests from the low-level transport API. (Pull #1293)
- ๐ฉ Raise errors on invalid URL types. (Pull #1259)
๐ Changed
- Cleaned up expected behaviour for URL escaping.
url.path
is now URL escaped. (Pull #1285) - Cleaned up expected behaviour for bytes vs str in URL components.
url.userinfo
andurl.query
are not URL escaped, and so return bytes. (Pull #1285) - โฌ๏ธ Drop
url.authority
property in favour ofurl.netloc
, since "authority" was semantically incorrect. (Pull #1285) - Drop
url.full_path
property in favour ofurl.raw_path
, for better consistency with other parts of the API. (Pull #1285) - 0๏ธโฃ No longer use the
chardet
library for auto-detecting charsets, instead defaulting to a simpler approach when no charset is specified. (#1269)
๐ Fixed
- Swapped ordering of redirects and authentication flow. (Pull #1267)
.netrc
lookups should use host, not host+port. (Pull #1298)
โ Removed
- The
URLLib3Transport
class no longer exists. We've published it instead as an example of a custom transport class. (Pull #1182) - โฌ๏ธ Drop
request.timer
attribute, which was being used internally to setresponse.elapsed
. (Pull #1249) - โฌ๏ธ Drop
response.decoder
attribute, which was being used internally. (Pull #1276) Request.prepare()
is now a private method. (Pull #1284)- ๐ The
Headers.getlist()
method had previously been deprecated in favour ofHeaders.get_list()
. It is now fully removed. - ๐ The
QueryParams.getlist()
method had previously been deprecated in favour ofQueryParams.get_list()
. It is now fully removed. - ๐ The
URL.is_ssl
property had previously been deprecated in favour ofURL.scheme == "https"
. It is now fully removed. - ๐ The
httpx.PoolLimits
class had previously been deprecated in favour ofhttpx.Limits
. It is now fully removed. - ๐ The
max_keepalive
setting had previously been deprecated in favour of the more explicitmax_keepalive_connections
. It is now fully removed. - ๐
The verbose
httpx.Timeout(5.0, connect_timeout=60.0)
style had previously been deprecated in favour ofhttpx.Timeout(5.0, connect=60.0)
. It is now fully removed. - ๐ Support for instantiating a timeout config missing some defaults, such as
httpx.Timeout(connect=60.0)
, had previously been deprecated in favour of enforcing a more explicit style, such ashttpx.Timeout(5.0, connect=60.0)
. This is now strictly enforced.
-
v0.14.3 Changes
September 02, 2020 -
v0.14.2 Changes
August 24, 20200.14.2 (August 24th, 2020)
โ Added
- ๐ Support
client.get(..., auth=None)
to bypass the default authentication on a clients. (Pull #1115) - ๐ Support
client.auth = ...
property setter. (Pull #1185) - ๐ Support
httpx.get(..., proxies=...)
on top-level request functions. (Pull #1198) - ๐ Display instances with nicer import styles. (Eg. <httpx.ReadTimeout ...>) (Pull #1155)
- ๐ Support
cookies=[(key, value)]
list-of-two-tuples style usage. (Pull #1211)
๐ Fixed
- Ensure that automatically included headers on a request may be modified. (Pull #1205)
- ๐ Allow explicit
Content-Length
header on streaming requests. (Pull #1170) - ๐ Handle URL quoted usernames and passwords properly. (Pull #1159)
- 0๏ธโฃ Use more consistent default for
HEAD
requests, settingallow_redirects=True
. (Pull #1183) - ๐ป If a transport error occurs while streaming the response, raise an
httpx
exception, not the underlyinghttpcore
exception. (Pull #1190) - Include the underlying
httpcore
traceback, when transport exceptions occur. (Pull #1199)
- ๐ Support
-
v0.14.1 Changes
August 11, 20200.14.1 (August 11th, 2020)
โ Added
- ๐ป The
httpx.URL(...)
class now raiseshttpx.InvalidURL
on invalid URLs, rather than exposing the underlyingrfc3986
exception. If a redirect response includes an invalid 'Location' header, then aRemoteProtocolError
exception is raised, which will be associated with the request that caused it. (Pull #1163)
๐ Fixed
- ๐ Handling multiple
Set-Cookie
headers became broken in the 0.14.0 release, and is now resolved. (Pull #1156)
- ๐ป The
-
v0.14.0 Changes
August 07, 20200.14.0 (August 7th, 2020)
๐ The 0.14 release includes a range of improvements to the public API, intended on preparing for our upcoming 1.0 release.
- Our HTTP/2 support is now fully optional. You now need to use
pip install httpx[http2]
if you want to include the HTTP/2 dependancies. - ๐ Our HSTS support has now been removed. Rewriting URLs from
http
tohttps
if the host is on the HSTS list can be beneficial in avoiding roundtrips to incorrectly formed URLs, but on balance we've decided to remove this feature, on the principle of least surprise. Most programmatic clients do not include HSTS support, and for now we're opting to remove our support for it. - ๐ Our exception hierarchy has been overhauled. Most users will want to stick with their existing
httpx.HTTPError
usage, but we've got a clearer overall structure now. See https://www.python-httpx.org/exceptions/ for more details.
โฌ๏ธ When upgrading you should be aware of the following public API changes. Note that deprecated usages will currently continue to function, but will issue warnings.
- You should now use
httpx.codes
consistently in favour ofhttpx.StatusCodes
. - 0๏ธโฃ Usage of
httpx.Timeout()
should now always include an explicit default. Eg.httpx.Timeout(None, pool=5.0)
. - โฑ When using
httpx.Timeout()
, we now have more concisely named keyword arguments. Eg.read=5.0
, instead ofread_timeout=5.0
. - ๐ Use
httpx.Limits()
instead ofhttpx.PoolLimits()
, andlimits=...
instead ofpool_limits=...
. - ๐ The
httpx.Limits(max_keepalive=...)
argument is now deprecated in favour of a more explicithttpx.Limits(max_keepalive_connections=...)
- ๐
Keys used with
Client(proxies={...})
should now be in the style of{"http://": ...}
, rather than{"http": ...}
. - ๐ The multidict methods
Headers.getlist()
andQueryParams.getlist()
are deprecated in favour of more consistent.get_list()
variants. - ๐ The
URL.is_ssl
property is deprecated in favour ofURL.scheme == "https"
. - ๐
The
URL.join(relative_url=...)
method is nowURL.join(url=...)
. This change does not support warnings for the deprecated usage style.
๐ One notable aspect of the 0.14.0 release is that it tightens up the public API for
httpx
, by ensuring that several internal attributes and methods have now become strictly private.The following previously had nominally public names on the client, but were all undocumented and intended solely for internal usage. They are all now replaced with underscored names, and should not be relied on or accessed.
๐ These changes should not affect users who have been working from the
httpx
documentation.- ๐
.merge_url()
,.merge_headers()
,.merge_cookies()
,.merge_queryparams()
- ๐
.build_auth()
,.build_redirect_request()
.redirect_method()
,.redirect_url()
,.redirect_headers()
,.redirect_stream()
.send_handling_redirects()
,.send_handling_auth()
,.send_single_request()
.init_transport()
,.init_proxy_transport()
.proxies
,.transport
,.netrc
,.get_proxy_map()
๐ See pull requests #997, #1065, #1071.
๐ Some areas of API which were already on the deprecation path, and were raising warnings or errors in 0.13.x have now been escalated to being fully removed.
- โฌ๏ธ Drop
ASGIDispatch
,WSGIDispatch
, which have been replaced byASGITransport
,WSGITransport
. - โฌ๏ธ Drop
dispatch=...
on client, which has been replaced by
transport=...`` - Drop
soft_limit
,hard_limit
, which have been replaced bymax_keepalive
andmax_connections
. - Drop
Response.stream
andResponse.raw
, which have been replaced by
.aiter_bytes
and.aiter_raw
. - โฌ๏ธ Drop
proxies=<transport instance>
in favor ofproxies=httpx.Proxy(...)
.
๐ See pull requests #1057, #1058.
Added
- Added dedicated exception class
httpx.HTTPStatusError
for.raise_for_status()
exceptions. (Pull #1072) - Added
httpx.create_ssl_context()
helper function. (Pull #996) - ๐ Support for proxy exlcusions like
proxies={"https://www.example.com": None}
. (Pull #1099) - ๐ Support
QueryParams(None)
andclient.params = None
. (Pull #1060)
๐ Changed
- ๐ Use
httpx.codes
consistently in favour ofhttpx.StatusCodes
which is placed into deprecation. (Pull #1088) - 0๏ธโฃ Usage of
httpx.Timeout()
should now always include an explicit default. Eg.httpx.Timeout(None, pool=5.0)
. (Pull #1085) - โฑ Switch to more concise
httpx.Timeout()
keyword arguments. Eg.read=5.0
, instead ofread_timeout=5.0
. (Pull #1111) - ๐ Use
httpx.Limits()
instead ofhttpx.PoolLimits()
, andlimits=...
instead ofpool_limits=...
. (Pull #1113) - ๐ The
httpx.Limits(max_keepalive=...)
argument is now deprecated in favour of a more explicithttpx.Limits(max_keepalive_connections=...)
. - ๐
Keys used with
Client(proxies={...})
should now be in the style of{"http://": ...}
, rather than{"http": ...}
. (Pull #1127) - ๐ The multidict methods
Headers.getlist
andQueryParams.getlist
are deprecated in favour of more consistent.get_list()
variants. (Pull #1089) URL.port
becomesOptional[int]
. Now only returns a port if one is explicitly included in the URL string. (Pull #1080)- The
URL(..., allow_relative=[bool])
parameter no longer exists. All URL instances may be relative. (Pull #1073) - โฌ๏ธ Drop unnecessary
url.full_path = ...
property setter. (Pull #1069) - The
URL.join(relative_url=...)
method is nowURL.join(url=...)
. (Pull #1129) - ๐ The
URL.is_ssl
property is deprecated in favour ofURL.scheme == "https"
. (Pull #1128)
๐ Fixed
- โ Add missing
Response.next()
method. (Pull #1055) - ๐ป Ensure all exception classes are exposed as public API. (Pull #1045)
- ๐ Support multiple items with an identical field name in multipart encodings. (Pull #777)
- Skip HSTS preloading on single-label domains. (Pull #1074)
- ๐ Fixes for
Response.iter_lines()
. (Pull #1033, #1075) - Ignore permission errors when accessing
.netrc
files. (Pull #1104) - ๐ Allow bare hostnames in
HTTP_PROXY
etc... environment variables. (Pull #1120) - 0๏ธโฃ Settings
app=...
ortransport=...
bypasses any environment based proxy defaults. (Pull #1122) - ๐ Fix handling of
.base_url
when a path component is included in the base URL. (Pull #1130)
- Our HTTP/2 support is now fully optional. You now need to use
-
v0.13.3 Changes
May 29, 2020 -
v0.13.2 Changes
May 27, 2020 -
v0.13.1 Changes
May 22, 2020 -
v0.13.0 Changes
May 22, 20200.13.0 (May 22nd, 2020)
๐ This release switches to
httpcore
for all the internal networking, which means:- ๐ We're using the same codebase for both our sync and async clients.
- ๐ HTTP/2 support is now available with the sync client.
- We no longer have a
urllib3
dependency for our sync client, although there is still an optionalURLLib3Transport
class.
๐ It also means we've had to remove our UDS support, since maintaining that would have meant having to push back our work towards a 1.0 release, which isn't a trade-off we wanted to make.
We also now have a public "Transport API", which you can use to implement custom transport implementations against. This formalises and replaces our previously private "Dispatch API".
๐ Changed
- ๐ Use
httpcore
for underlying HTTP transport. Dropurllib3
requirement. (Pull #804, #967) - Rename pool limit options from
soft_limit
/hard_limit
tomax_keepalive
/max_connections
. (Pull #968) - ๐ The previous private "Dispatch API" has now been promoted to a public "Transport API". When customizing the transport use
transport=...
. TheASGIDispatch
andWSGIDispatch
class naming is deprecated in favour ofASGITransport
andWSGITransport
. (Pull #963)
โ Added
- โ Added
URLLib3Transport
class for optionalurllib3
transport support. (Pull #804, #963) - Streaming multipart uploads. (Pull #857)
- ๐ฒ Logging via HTTPCORE_LOG_LEVEL and HTTPX_LOG_LEVEL environment variables
๐ฒ and TRACE level logging. (Pull encode/httpcore#79)
๐ Fixed
- ๐ Performance improvement in brotli decoder. (Pull #906)
- ๐ Proper warning level of deprecation notice in
Response.stream
andResponse.raw
. (Pull #908) - ๐ Fix support for generator based WSGI apps. (Pull #887)
- Reuse of connections on HTTP/2 in close concurrency situations. (Pull encode/httpcore#81)
- Honor HTTP/2 max concurrent streams settings (Pull encode/httpcore#89, encode/httpcore#90)
- ๐ Fix bytes support in multipart uploads. (Pull #974)
- ๐ Improve typing support for
files=...
. (Pull #976)
โ Removed
- โฌ๏ธ Dropped support for
Client(uds=...)
(Pull #804)
0.13.0.dev2 (May 12th, 2020)
๐ The 0.13.0.dev2 is a pre-release version. To install it, use
pip install httpx --pre
.โ Added
- ๐ฒ Logging via HTTPCORE_LOG_LEVEL and HTTPX_LOG_LEVEL environment variables
๐ฒ and TRACE level logging. (HTTPCore Pull #79)
๐ Fixed
-
v0.13.0.dev2 Changes
May 12, 20200.13.0.dev2 (May 12th, 2020)
๐ The 0.13.0.dev2 is a pre-release version. To install it, use
pip install httpx --pre
.โ Added
- ๐ฒ Logging via HTTPCORE_LOG_LEVEL and HTTPX_LOG_LEVEL environment variables
๐ฒ and TRACE level logging. (HTTPCore Pull #79)
๐ Fixed
- ๐ฒ Logging via HTTPCORE_LOG_LEVEL and HTTPX_LOG_LEVEL environment variables