* `h2` - HTTP/2 support. *(Optional)*
* `certifi` - SSL certificates.
* `chardet` - Fallback auto-detection for response encoding.
-* `idna` - Internationalized domain name support.
* `rfc3986` - URL parsing & normalization.
+ * `idna` - Internationalized domain name support.
* `sniffio` - Async library autodetection.
* `urllib3` - Support for the `httpx.URLLib3Transport` class. *(Optional)*
* `brotlipy` - Decoding for "brotli" compressed responses. *(Optional)*
* `httpcore` - The underlying transport implementation for `httpx`.
* `h11` - HTTP/1.1 support.
- * `h2` - HTTP/2 support.
+ * `h2` - HTTP/2 support. *(Optional)*
* `certifi` - SSL certificates.
* `chardet` - Fallback auto-detection for response encoding.
-* `idna` - Internationalized domain name support.
* `rfc3986` - URL parsing & normalization.
+ * `idna` - Internationalized domain name support.
* `sniffio` - Async library autodetection.
* `urllib3` - Support for the `httpx.URLLib3Transport` class. *(Optional)*
* `brotlipy` - Decoding for "brotli" compressed responses. *(Optional)*
$ pip install httpx[http2]
```
+To include the optional brotli decoder support, use:
+
+```shell
+$ pip install httpx[brotli]
+```
+
HTTPX requires Python 3.6+
[sync-support]: https://github.com/encode/httpx/issues/572
"""
def __init__(self, request: "Request") -> None:
- assert (
- brotli is not None
- ), "The 'brotlipy' or 'brotli' library must be installed to use 'BrotliDecoder'"
+ if brotli is None: # pragma: nocover
+ raise ImportError(
+ "Using 'BrotliDecoder', but the 'brotlipy' or 'brotli' library "
+ "is not installed."
+ "Make sure to install httpx using `pip install httpx[brotli]`."
+ ) from None
+
self.request = request
self.decompressor = brotli.Decompressor()
self.seen_data = False
"certifi",
"sniffio",
"chardet==3.*",
- "idna==2.*",
- "rfc3986>=1.3,<2",
+ "rfc3986[idna2008]>=1.3,<2",
"httpcore==0.10.*",
],
extras_require={
"http2": "h2==3.*",
+ "brotli": "brotlipy==0.7.*",
},
classifiers=[
"Development Status :: 4 - Beta",