diff --git a/HISTORY.md b/HISTORY.md index 9b08a7f2d6..6a6040c974 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -5,6 +5,8 @@ dev --- - \[Short description of non-trivial change.\] +- Requests Brotli compression, if either the `brotli` or `brotlicffi` package + is installed. **Dependencies** diff --git a/docs/community/faq.rst b/docs/community/faq.rst index c0177719bd..19732aedac 100644 --- a/docs/community/faq.rst +++ b/docs/community/faq.rst @@ -11,6 +11,9 @@ Encoded Data? Requests automatically decompresses gzip-encoded responses, and does its best to decode response content to unicode when possible. +When either the `brotli `_ or `brotlicffi `_ +package is installed, requests also decodes Brotli-encoded responses. + You can get direct access to the raw response (and even the socket), if needed as well. diff --git a/docs/user/quickstart.rst b/docs/user/quickstart.rst index 0e2bcadfdc..b4649f00d5 100644 --- a/docs/user/quickstart.rst +++ b/docs/user/quickstart.rst @@ -128,6 +128,9 @@ You can also access the response body as bytes, for non-text requests:: The ``gzip`` and ``deflate`` transfer-encodings are automatically decoded for you. +The ``br`` transfer-encoding is automatically decoded for you if a Brotli library +like `brotli `_ or `brotlicffi `_ is installed. + For example, to create an image from binary data returned by a request, you can use the following code:: diff --git a/requests/utils.py b/requests/utils.py index 6705c9a300..dbb02a0d79 100644 --- a/requests/utils.py +++ b/requests/utils.py @@ -20,6 +20,7 @@ import warnings import zipfile from collections import OrderedDict +from urllib3.util import make_headers from .__version__ import __version__ from . import certs @@ -41,6 +42,11 @@ DEFAULT_PORTS = {'http': 80, 'https': 443} +# Ensure that ', ' is used to preserve previous delimiter behavior. +DEFAULT_ACCEPT_ENCODING = ", ".join( + re.split(r",\s*", make_headers(accept_encoding=True)["accept-encoding"]) +) + if sys.platform == 'win32': # provide a proxy_bypass version on Windows without DNS lookups @@ -835,7 +841,7 @@ def default_headers(): """ return CaseInsensitiveDict({ 'User-Agent': default_user_agent(), - 'Accept-Encoding': ', '.join(('gzip', 'deflate')), + 'Accept-Encoding': DEFAULT_ACCEPT_ENCODING, 'Accept': '*/*', 'Connection': 'keep-alive', })