* Replace cgi which will be deprecated in Python 3.11
* Update httpx/_utils.py
-import cgi
import datetime
import email.message
import json as jsonlib
normalize_header_key,
normalize_header_value,
obfuscate_sensitive_headers,
+ parse_content_type_charset,
parse_header_links,
)
if content_type is None:
return None
- _, params = cgi.parse_header(content_type)
- if "charset" not in params:
- return None
-
- return params["charset"].strip("'\"")
+ return parse_content_type_charset(content_type)
def _get_content_decoder(self) -> ContentDecoder:
"""
import codecs
+import email.message
import logging
import mimetypes
import netrc
return links
+def parse_content_type_charset(content_type: str) -> typing.Optional[str]:
+ # We used to use `cgi.parse_header()` here, but `cgi` became a dead battery.
+ # See: https://peps.python.org/pep-0594/#cgi
+ msg = email.message.Message()
+ msg["content-type"] = content_type
+ return msg.get_content_charset(failobj=None)
+
+
SENSITIVE_HEADERS = {"authorization", "proxy-authorization"}