Conversation
Contributor
There was a problem hiding this comment.
Code Review
This pull request updates the dependency constraint for urllib3 from <2.0.0 to <2.8.1 in requirements.txt. Feedback was provided to remove the outdated StackOverflow reference comment, as it is no longer relevant with the upgrade to a 2.x-compatible version.
| firebase-admin==7.0.0 | ||
| structlog==25.1.0 | ||
| urllib3<2.0.0 #https://stackoverflow.com/questions/76175361/firebase-authentication-httpresponse-object-has-no-attribute-strict-status | ||
| urllib3<2.8.1 #https://stackoverflow.com/questions/76175361/firebase-authentication-httpresponse-object-has-no-attribute-strict-status |
Contributor
amcolin
approved these changes
Oct 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
<2.0.0→<2.8.1urllib3: HTTPS proxy TLS configuration may be ignored or overridden
CVE-2026-97687 / GHSA-8988-9cw3-xx77
More information
Details
Impact
urllib3 supports configuring TLS independently for an HTTPS proxy and the target server.
proxy_ssl_context,proxy_assert_hostname, andproxy_assert_fingerprintconfigure the TLS connection to the proxy.ssl_contextand the other target-specific TLS parameters configure the connection to the target server.In urllib3 versions 1.26.0 through 2.7.0, these configurations were not consistently separated. Depending on the proxy mode, urllib3 could:
proxy_ssl_contextand use the target server's SSL context for the TLS connection to an HTTPS forwarding proxy.In particular, configuring
cert_reqs="CERT_NONE"for a target server could overwrite theverify_modeof the SSL context configured for the HTTPS proxy. This modification occurred in place and persisted on the context object, potentially disabling proxy certificate verification for later connections that reused the same context.An attacker able to intercept the connection to an HTTPS proxy may be able to impersonate the proxy when the effective proxy TLS configuration disables certificate verification or otherwise accepts the attacker's certificate. This may occur, for example, when the target server's trust or identity policy is incorrectly applied to the proxy connection.
When HTTPS forwarding is enabled, an impersonated proxy can observe or modify forwarded requests and responses, potentially exposing credentials, authentication tokens, request bodies, response data, and other sensitive information.
A TLS client certificate intended for the target server may also be presented to the proxy or to an attacker impersonating it. This can disclose the client's identity and provide proof of possession of the corresponding private key. The private key itself is not transmitted during the TLS handshake.
In CONNECT tunneling mode, impersonating the HTTPS proxy does not by itself defeat the separate end-to-end TLS connection between the client and the target server.
Affected Usages
Code using urllib3 versions 1.26.0 through 2.7.0 may be affected in any of the following cases.
1. The target SSL context is used for an HTTPS forwarding proxy
HTTPS requests are forwarded through an HTTPS proxy with
use_forwarding_for_https=True, andproxy_ssl_contextis configured for the proxy.urllib3 may ignore
proxy_ssl_contextand use the target server'sssl_contextfor the proxy TLS handshake. The proxy may therefore be verified using the target server's trust and certificate policy instead of the policy explicitly configured for the proxy.2. The target verification policy overrides the proxy policy
An HTTPS proxy is configured with
proxy_ssl_context, while the target server uses a different certificate-verification policy.urllib3 may apply the target server's
cert_reqsvalue to the proxy SSL context. For example, settingcert_reqs="CERT_NONE"for the target server may also disable certificate verification for the HTTPS proxy, even whenproxy_ssl_contextwas configured to require verification.This issue can affect the TLS connection to an HTTPS proxy in both forwarding and CONNECT tunneling configurations.
3. A mutated proxy SSL context is reused
The same SSL context is reused as
proxy_ssl_contextacross multiple connections, and certificate verification is disabled for one target server.urllib3 may modify the proxy SSL context's
verify_modein place. Later connections that reuse the same context may therefore connect to the HTTPS proxy without certificate verification.4. Target-specific TLS identity or credentials are applied to the proxy
HTTPS requests are forwarded through an HTTPS proxy with
use_forwarding_for_https=True, and target-specific SNI, hostname assertions, certificate fingerprint assertions, or TLS client credentials are configured.urllib3 may apply these target-specific settings to the proxy TLS handshake. This may cause urllib3 to:
Code connecting through a plain HTTP proxy does not establish a TLS connection to the proxy and is not affected by this issue.
Remediation
Upgrade to urllib3 2.8.0 or later.
urllib3 2.8.0 independently applies the explicitly configured
proxy_ssl_contextand proxy-specific certificate assertions to the HTTPS proxy connection. Target-specific SNI, certificate assertions, and TLS client certificate parameters are no longer applied to the HTTPS proxy handshake.For backward compatibility, when an HTTPS proxy is used with
use_forwarding_for_https=Trueandproxy_ssl_contextis not provided, urllib3 2.8.0 continues to usessl_contextfor the TLS connection to the proxy. This configuration emits aFutureWarning. In urllib3 3.0, passingssl_contextwithuse_forwarding_for_https=Truefor an HTTPS proxy will raise an error. Applications should useproxy_ssl_contextto configure TLS for an HTTPS forwarding proxy.The fixes were implemented in commits b6447295fff7b38fdffc67e0df9712d60cef3cc3 and 07408cec79d1856d81bb42c74a904a24fdb9e465.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
urllib3: HTTPResponse.stream()/read_chunked() buffers an unbounded chunk-size line into memory
CVE-2026-97689 / GHSA-vxq7-64xx-v4gw
More information
Details
Impact
urllib3's streaming API is designed for efficiently handling large HTTP responses by reading the content in chunks, rather than loading the entire response body into memory at once. When decoding a chunked-transfer-encoded response, this API reads each chunk's size field by buffering until it sees
\nor EOF.A malicious HTTP server can return
Transfer-Encoding: chunkedand then send a very long run of bytes without any newline, causing the streaming client to buffer that entire run before urllib3 can reject the chunk size as invalid and allocate more memory than intended.To fix the issue, we'll reject chunk-size fields larger than 65536 bytes, as already done in the non-streaming case, which is currently handled by the Python standard library. Note that this only applies to reading the chunk-size field, not the chunk data, which is already handled correctly. Thus, there shouldn't be any impact for non-malicious servers.
Affected usages
Applications and libraries using urllib3 versions earlier than 2.8.0 may be affected when streaming a chunked response from untrusted sources. Specifically, this affects the read_chunked() and stream() methods of the HTTPResponse object.
This also affects requests streaming API, which uses urllib3 under the hood.
Remediation
Upgrade to urllib3 version 2.8.0 or later, where chunk-size fields larger than 65536 will be rejected. If upgrading is not immediately possible, consider reading the response at once using the read() method.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
urllib3: Chunked Deflate streaming can enter an infinite loop
CVE-2026-97688 / GHSA-gh4c-6fx4-qh6g
More information
Details
Impact
urllib3's streaming API is designed for the efficient handling of large HTTP responses by reading content in chunks instead of loading the entire response body into memory at once.
urllib3 can decompress response bodies according to the HTTP
Content-Encodingheader. When streaming a compressed, chunked response, urllib3 first consumes data already buffered by the decoder before reading the next HTTP chunk.However, urllib3 versions from 2.6.2 through 2.7.0 could enter an infinite loop when a chunked response contained bytes after the end of the Deflate stream. If the decompressed body exceeded the requested streaming chunk size, Python's zlib implementation could retain the trailing bytes as unconsumed input after reaching the end of the compressed stream. urllib3 would repeatedly attempt to decode those same bytes without making progress or reading more data from the network.
A malicious server could exploit this behavior to cause excessive CPU usage and prevent the affected request from completing on the client. Network read timeouts would not interrupt the loop because no further socket operation was required.
Affected usages
Applications and libraries using urllib3 versions 2.6.2 through 2.7.0 may be affected when all of the following conditions are met:
HTTPResponse.stream(amt=N)orHTTPResponse.read_chunked(amt=N)with a positive, finite chunk size.Transfer-Encoding: chunkedandContent-Encoding: deflate.HTTPResponse.stream()uses a finite chunk size by default and is therefore affected when the other conditions are met.Remediation
Upgrade to urllib3 2.8.0, in which the Deflate decoder stops accepting input after reaching the end of the compressed stream and no longer reports trailing bytes as data that can produce more decoded output.
If upgrading is not immediately possible, disable automatic content decoding for responses from untrusted sources by setting
decode_content=False, or reject streamed responses using the Deflate content encoding. Applications that disable automatic decoding must handle the compressed response safely at another layer.Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
urllib3/urllib3 (urllib3)
v2.8.0Compare Source
==================
Security
Fixed the following security issues:
(High severity,
GHSA-8988-9cw3-xx77 <https://github.com/urllib3/urllib3/security/advisories/GHSA-8988-9cw3-xx77>__)HTTPResponse.stream()andread_chunked()could buffer a chunk-sizeline of unbounded length in memory. (High severity,
GHSA-vxq7-64xx-v4gw <https://github.com/urllib3/urllib3/security/advisories/GHSA-vxq7-64xx-v4gw>__)GHSA-gh4c-6fx4-qh6g <https://github.com/urllib3/urllib3/security/advisories/GHSA-gh4c-6fx4-qh6g>__).. caution::
Deprecations & Removals
Retryoptionallowed_methodsto retry any verb.(
#​5044 <https://github.com/urllib3/urllib3/issues/5044>__)Features
Url.auth_decodedandUrl.auth_decoded_joinedconvenienceproperties to the result of
parse_url().(
#​4945 <https://github.com/urllib3/urllib3/issues/4945>__)basic_auth_encodingandproxy_basic_auth_encodingparameters tourllib3.util.make_headers().(
#​5092 <https://github.com/urllib3/urllib3/issues/5092>__)Bugfixes
Fixed response header handling to replace obsolete folded header lines
(
obs-fold) with spaces in accordance with RFC 9112, preventing raw CRLFsequences from appearing in header values such as
Set-Cookie.(
#​1362 <https://github.com/urllib3/urllib3/issues/1362>__)Fixed usage of
proxy_ssl_contextwithProxyManagerwhenuse_forwarding_for_https=True. Passingssl_contextinstead ofproxy_ssl_contextfor HTTPS proxies in this configuration now emits aFutureWarningand will raise an error in v3.0.(
#​2577 <https://github.com/urllib3/urllib3/issues/2577>__)Changed behavior of the default
ConnectionPool.poolinitialization.LifoQueueis now resolved from thequeuemodule after theConnectionPoolis instantiated instead of using the default cachedQueueClsclass property. This is done because sometimes thequeue.LifoQueueis monkey-patched late in the program, such as by gevent.(
#​3289 <https://github.com/urllib3/urllib3/issues/3289>__)Raised
UnrewindableBodyErrorinstead ofValueErrorwhen retrying arequest whose body had
tell()but notseek().(
#​3779 <https://github.com/urllib3/urllib3/issues/3779>__)Decoded percent-encoded SOCKS proxy credentials before authenticating with
the proxy server.
(
#​3785 <https://github.com/urllib3/urllib3/issues/3785>__)Fixed
HTTPResponse.drain_conn()to discard unread response data in 64 KiBchunks (same as the default
amtwhen doingHTTPResponse.stream(...)).(
#​5019 <https://github.com/urllib3/urllib3/issues/5019>__)Fixed
is_ipaddress()to detect non-standard IPv4 forms accepted bysocket.connect, such as hex (0x7f000001), octal (0177.0.0.1), anddecimal integers (
2130706433), ensuring SSL certificate verification usesthe correct mode for these addresses.
(
#​5029 <https://github.com/urllib3/urllib3/issues/5029>__)Fixed
HTTPConnectionPool.urlopenraising a misleadingFullPoolErrorinstead of
ValueErrorwhen called with an invalidtimeoutargument ona pool created with
block=True.(
#​5059 <https://github.com/urllib3/urllib3/issues/5059>__)Fixed port-zero handling to preserve explicit
:0values instead ofsubstituting the default ports 80 or 443 in URL parsing, pool selection,
proxy configuration,
connection_from_url(), and HTTP/2 request authority.(
#​5071 <https://github.com/urllib3/urllib3/issues/5071>,#​5101 <https://github.com/urllib3/urllib3/issues/5101>)Fixed a bug where
PoolManagerpassed theassert_hostnameandassert_fingerprintparameters to HTTP connection pools.(
#​5077 <https://github.com/urllib3/urllib3/issues/5077>__)Fixed
HTTPConnectionPool.urlopen()and HTTP proxy forwarding to strip URLfragments from absolute request targets before sending requests.
(
#​5079 <https://github.com/urllib3/urllib3/issues/5079>__)Added safeguards to the proxy tunneling code to prevent potential security
issues when handling invalid characters in the proxy host and HTTP headers.
This change affects users of Python 3.10, Python 3.11, and Python 3.12 when
the standard library does not contain the fix; those on newer Python versions
should upgrade to 3.13.14+ or 3.14.5+ to get the same security fixes.
(
#​5091 <https://github.com/urllib3/urllib3/issues/5091>__)Fixed
HTTPSConnection.connect()overridingProxyConfig.ssl_context'scertificate policy and proxy identity checks with the target connection's TLS
settings when forwarding through an HTTPS proxy.
HTTPSConnectionno longer applies target SNI, assertions, or clientcredentials to forwarding proxy handshakes and continues to use its
ssl_contextas a fallback when an HTTPS proxy forwards an HTTP target.(
#​5093 <https://github.com/urllib3/urllib3/issues/5093>__)Fixed URL parsing to more strictly enforce RFC 3986 host syntax, rejecting
invalid host input such as raw spaces and control characters, malformed
percent-encodings, and percent-encoded control characters in HTTP(S) hosts
and IPv6 zone identifiers, including proxy CONNECT tunnel targets. Host
normalization now also follows RFC 3986 normalization rules for
percent-encoded octets by decoding percent-encoded unreserved characters and
uppercasing the hexadecimal digits of retained percent-encoded octets.
(
#​5095 <https://github.com/urllib3/urllib3/issues/5095>__)Fixed an
AttributeErroron Python built with OpenSSL 4+, wheressl.PROTOCOL_TLSv1no longer exists.(
#​5097 <https://github.com/urllib3/urllib3/issues/5097>__)Fixed
urllib3.contrib.pyopensslto use cryptography APIs when reading acertificate subject and loading encrypted private keys, avoiding
DeprecationWarningraised by pyOpenSSL 26.3.0+.(
#​5103 <https://github.com/urllib3/urllib3/issues/5103>__)Fixed handling of HTTP 303 redirects for requests with chunked or file-like
bodies.
(
#​5161 <https://github.com/urllib3/urllib3/issues/5161>__)Fixed
assert_fingerprint()to raiseSSLErrorinstead ofbinascii.Errorwhen a fingerprint has a supported length but containsnon-hexadecimal characters.
(
#​5211 <https://github.com/urllib3/urllib3/issues/5211>__)Misc
testdependency group containing the minimum dependencies neededto run the test suite, intended for downstream packagers. The
dev-baseand
mypygroups now include this new group viainclude-group,removing duplication.
(
#​3594 <https://github.com/urllib3/urllib3/issues/3594>__)(
#​5094 <https://github.com/urllib3/urllib3/issues/5094>__)(
#​5166 <https://github.com/urllib3/urllib3/issues/5166>__)(
#​5209 <https://github.com/urllib3/urllib3/issues/5209>__)(
#​5232 <https://github.com/urllib3/urllib3/issues/5232>,#​5234 <https://github.com/urllib3/urllib3/issues/5234>,#​5239 <https://github.com/urllib3/urllib3/issues/5239>__)v2.7.0Compare Source
=======================
Security
Addressed high-severity security issues.
Impact was limited to specific use cases detailed in the accompanying
advisories; overall user exposure was estimated to be marginal.
Decompression-bomb safeguards of the streaming API were bypassed:
HTTPResponse.drain_conn()was called after the response had beenread and decompressed partially.
HTTPResponse.read(amt=N)orHTTPResponse.stream(amt=N)call when the response was decompressedusing the official
Brotli <https://pypi.org/project/brotli/>__ library.See
GHSA-mf9v-mfxr-j63j <https://github.com/urllib3/urllib3/security/advisories/GHSA-mf9v-mfxr-j63j>__for details.
HTTP pools created using
ProxyManager.connection_from_urldid not stripsensitive headers specified in
Retry.remove_headers_on_redirectwhenredirecting to a different host.
(
GHSA-qccp-gfcp-xxvc <https://github.com/urllib3/urllib3/security/advisories/GHSA-qccp-gfcp-xxvc>__)Deprecations and Removals
FutureWarninginstead ofDeprecationWarningfor bettervisibility of existing deprecation notices. Rescheduled the removal of
deprecated features to version 3.0.
(
#​3763 <https://github.com/urllib3/urllib3/issues/3763>__)(
#​3720 <https://github.com/urllib3/urllib3/issues/3720>__)(
#​4979 <https://github.com/urllib3/urllib3/issues/4979>__)(
#​3777 <https://github.com/urllib3/urllib3/issues/3777>__)Bugfixes
HTTPResponse.read(amt=None)was ignoring decompresseddata buffered from previous partial reads.
(
#​3636 <https://github.com/urllib3/urllib3/issues/3636>__)HTTPResponse.read()could cache only part of theresponse after a partial read when
cache_content=True.(
#​4967 <https://github.com/urllib3/urllib3/issues/4967>__)HTTPResponse.stream()andHTTPResponse.read_chunked()to handleamt=0.(
#​3793 <https://github.com/urllib3/urllib3/issues/3793>__)_TYPE_BODYtype alias to include missingIterable[str],matching the documented and runtime behavior of chunked request bodies.
(
#​3798 <https://github.com/urllib3/urllib3/issues/3798>__)LocationParseErrorwhen paths resembling schemeless URIs werepassed to
HTTPConnectionPool.urlopen().(
#​3352 <https://github.com/urllib3/urllib3/issues/3352>__)BaseHTTPResponse.readinto()type annotation to acceptmemoryviewin addition tobytearray, matching theio.RawIOBase.readintocontract and enabling use withio.BufferedReaderwithout type errors.(
#​3764 <https://github.com/urllib3/urllib3/issues/3764>__)v2.6.3Compare Source
==================
the streaming API were bypassed when HTTP redirects were followed.
(
GHSA-38jv-5279-wg99 <https://github.com/urllib3/urllib3/security/advisories/GHSA-38jv-5279-wg99>__)Retry-Aftertimes greater than 6 hours as 6 hours bydefault. (
#​3743 <https://github.com/urllib3/urllib3/issues/3743>__)urllib3.connection.VerifiedHTTPSConnectionon Emscripten.(
#​3752 <https://github.com/urllib3/urllib3/issues/3752>__)v2.6.2Compare Source
==================
HTTPResponse.read_chunked()to properly handle leftover data inthe decoder's buffer when reading compressed chunked responses.
(
#​3734 <https://github.com/urllib3/urllib3/issues/3734>__)v2.6.1Compare Source
==================
HTTPResponse.getheaders()andHTTPResponse.getheader()methods.(
#​3731 <https://github.com/urllib3/urllib3/issues/3731>__)v2.6.0Compare Source
==================
Security
compressed HTTP content ("decompression bombs") leading to excessive resource
consumption even when a small amount of data was requested. Reading small
chunks of compressed data is safer and much more efficient now.
(
GHSA-2xpw-w6gg-jr37 <https://github.com/urllib3/urllib3/security/advisories/GHSA-2xpw-w6gg-jr37>__)virtually unlimited links in the
Content-Encodingheader, potentiallyleading to a denial of service (DoS) attack by exhausting system resources
during decoding. The number of allowed chained encodings is now limited to 5.
(
GHSA-gm62-xv2j-4w53 <https://github.com/urllib3/urllib3/security/advisories/GHSA-gm62-xv2j-4w53>__).. caution::
If urllib3 is not installed with the optional
urllib3[brotli]extra, butyour environment contains a Brotli/brotlicffi/brotlipy package anyway, make
sure to upgrade it to at least Brotli 1.2.0 or brotlicffi 1.2.0.0 to
benefit from the security fixes and avoid warnings. Prefer using
urllib3[brotli]to install a compatible Brotli package automatically.If you use custom decompressors, please make sure to update them to
respect the changed API of
urllib3.response.ContentDecoder.Features
HTTPHeaderDictusing bytes keys. (#​3653 <https://github.com/urllib3/urllib3/issues/3653>__)HTTPConnection. (#​3666 <https://github.com/urllib3/urllib3/issues/3666>__)#​3696 <https://github.com/urllib3/urllib3/issues/3696>__)Removals
HTTPResponse.getheaders()method in favor ofHTTPResponse.headers.Removed the
HTTPResponse.getheader(name, default)method in favor ofHTTPResponse.headers.get(name, default). (#​3622 <https://github.com/urllib3/urllib3/issues/3622>__)Bugfixes
urllib3.PoolManagerwhen an integer is passedfor the retries parameter. (
#​3649 <https://github.com/urllib3/urllib3/issues/3649>__)HTTPConnectionPoolwhen used in Emscripten with no explicit port. (#​3664 <https://github.com/urllib3/urllib3/issues/3664>__)SSLKEYLOGFILEwith expandable variables. (#​3700 <https://github.com/urllib3/urllib3/issues/3700>__)Misc
zstdextra to installbackports.zstdinstead ofzstandardon Python 3.13 and before. (#​3693 <https://github.com/urllib3/urllib3/issues/3693>__)BytesQueueBufferclass. (#​3710 <https://github.com/urllib3/urllib3/issues/3710>__)#​3652 <https://github.com/urllib3/urllib3/issues/3652>__)#​3638 <https://github.com/urllib3/urllib3/issues/3638>__)v2.5.0Compare Source
==================
Features
compression.zstdmodule that is new in Python 3.14.See
PEP 784 <https://peps.python.org/pep-0784/>_ for more information. (#​3610 <https://github.com/urllib3/urllib3/issues/3610>__)hatch-vcs(#​3612 <https://github.com/urllib3/urllib3/issues/3612>__)Bugfixes
redirects at the
urllib3.PoolManagerlevel via theretriesparameterdid not work.
retriesand
redirects.HTTPResponse.shutdownon a connection already released to the pool. (#​3581 <https://github.com/urllib3/urllib3/issues/3581>__)CONNECTstatement when using an IPv6 proxy withconnection_from_host. Previously would not be wrapped in[]. (#​3615 <https://github.com/urllib3/urllib3/issues/3615>__)v2.4.0Compare Source
==================
Features
#​3522 <https://github.com/urllib3/urllib3/issues/3522>__)#​3567 <https://github.com/urllib3/urllib3/issues/3567>__)verify_flagsoption tocreate_urllib3_contextwith a default ofVERIFY_X509_PARTIAL_CHAINandVERIFY_X509_STRICTfor Python 3.13+. (#​3571 <https://github.com/urllib3/urllib3/issues/3571>__)Bugfixes
#​3555 <https://github.com/urllib3/urllib3/issues/3555>__)Misc
#​3550 <https://github.com/urllib3/urllib3/issues/3550>__)multiple.intoto.jsonlasset from GitHub releases. Attestation of release files since v2.3.0 can be found on PyPI. (#​3566 <https://github.com/urllib3/urllib3/issues/3566>__)v2.3.0Compare Source
==================
Features
#​3522 <https://github.com/urllib3/urllib3/issues/3522>__)#​3567 <https://github.com/urllib3/urllib3/issues/3567>__)verify_flagsoption tocreate_urllib3_contextwith a default ofVERIFY_X509_PARTIAL_CHAINandVERIFY_X509_STRICTfor Python 3.13+. (#​3571 <https://github.com/urllib3/urllib3/issues/3571>__)Bugfixes
#​3555 <https://github.com/urllib3/urllib3/issues/3555>__)Misc
#​3550 <https://github.com/urllib3/urllib3/issues/3550>__)multiple.intoto.jsonlasset from GitHub releases. Attestation of release files since v2.3.0 can be found on PyPI. (#​3566 <https://github.com/urllib3/urllib3/issues/3566>__)v2.2.3Compare Source
==================
Features
#​3473 <https://github.com/urllib3/urllib3/issues/3473>__)Bugfixes
All other methods of supplying a request body already use UTF-8 starting in urllib3 v2.0. (
#​3053 <https://github.com/urllib3/urllib3/issues/3053>__)#​3252 <https://github.com/urllib3/urllib3/issues/3252>__)#​3413 <https://github.com/urllib3/urllib3/issues/3413>__)#​3432 <https://github.com/urllib3/urllib3/issues/3432>__)HTTPConnection.default_socket_options. (#​3448 <https://github.com/urllib3/urllib3/issues/3448>__)HTTP/2 (experimental)
HTTP/2 support is still in early development.
Excluded Transfer-Encoding: chunked from HTTP/2 request body (
#​3425 <https://github.com/urllib3/urllib3/issues/3425>__)Added version checking for
h2(https://pypi.org/project/h2/) usage.Now only accepting supported h2 major version 4.x.x. (
#​3290 <https://github.com/urllib3/urllib3/issues/3290>__)Added a probing mechanism for determining whether a given target origin
supports HTTP/2 via ALPN. (
#​3301 <https://github.com/urllib3/urllib3/issues/3301>__)Add support for sending a request body with HTTP/2 (
#​3302 <https://github.com/urllib3/urllib3/issues/3302>__)Deprecations and Removals
_version.pyfile has been removed and is now created at build time by hatch-vcs. (#​3412 <https://github.com/urllib3/urllib3/issues/3412>__)#​3475 <https://github.com/urllib3/urllib3/issues/3475>__)v2.2.2Compare Source
==================
Proxy-Authorizationheader to the list of headers to strip from requests when redirecting to a different host. As before, different headers can be set viaRetry.remove_headers_on_redirect.amtto read methods ofhttp.client.HTTPResponseas an alternative toNone. (#​3122 <https://github.com/urllib3/urllib3/issues/3122>__)typing.Self. (#​3363 <https://github.com/urllib3/urllib3/issues/3363>__)v2.2.1Compare Source
==================
InsecureRequestWarningwas emitted for HTTPS connections when using Emscripten. (#​3331 <https://github.com/urllib3/urllib3/issues/3331>__)HTTPConnectionPool.urlopento stop automatically casting non-proxy headers toHTTPHeaderDict. This change was premature as it did not apply to proxy headers andHTTPHeaderDictdoes not handle byte header values correctly yet. (#​3343 <https://github.com/urllib3/urllib3/issues/3343>__)InvalidChunkLengthtoProtocolErrorwhen response terminates before the chunk length is sent. (#​2860 <https://github.com/urllib3/urllib3/issues/2860>__)ProtocolErrorto be more verbose on incomplete reads with excess content. (#​3261 <https://github.com/urllib3/urllib3/issues/3261>__)v2.2.0Compare Source
==================
Emscripten and Pyodide <https://urllib3.readthedocs.io/en/latest/reference/contrib/emscripten.html>, including streaming support in cross-origin isolated browser environments where threading is enabled. (#​2951 <https://github.com/urllib3/urllib3/issues/2951>)HTTPResponse.read1()method. (#​3186 <https://github.com/urllib3/urllib3/issues/3186>__)#​3284 <https://github.com/urllib3/urllib3/issues/3284>__)when using proxy. (
#​2244 <https://github.com/urllib3/urllib3/issues/2244>__)HTTPConnection.proxy_is_verifiedandHTTPSConnection.proxy_is_verifiedto be always set to a boolean after connecting to a proxy. It could be
Nonein some cases previously. (#​3130 <https://github.com/urllib3/urllib3/issues/3130>__)headerspassed in a request withjson=would be mutated (#​3203 <https://github.com/urllib3/urllib3/issues/3203>__)HTTPSConnection.is_verifiedto be set toFalsewhen connectingfrom a HTTPS proxy to an HTTP target. It was set to
Truepreviously. (#​3267 <https://github.com/urllib3/urllib3/issues/3267>__)#​3268 <https://github.com/urllib3/urllib3/issues/3268>__)#​3325 <https://github.com/urllib3/urllib3/issues/3325>__)time with the
--integrationpytest flag. (#​3181 <https://github.com/urllib3/urllib3/issues/3181>__)v2.1.0Compare Source
==================
#​2680 <https://github.com/urllib3/urllib3/issues/2680>__)#​2681 <https://github.com/urllib3/urllib3/issues/2681>__)#​3143 <https://github.com/urllib3/urllib3/issues/3143>__)#​3065 <https://github.com/urllib3/urllib3/issues/3065>__)x-gzipcontent-encoding. (#​3174 <https://github.com/urllib3/urllib3/issues/3174>__)v2.0.7Compare Source
==================
v2.0.6Compare Source
==================
Cookieheader to the list of headers to strip from requests when redirecting to a different host. As before, different headers can be set viaRetry.remove_headers_on_redirect.v2.0.5Compare Source
==================
#​3126 <https://github.com/urllib3/urllib3/issues/3126>__)blocksizeofHTTPConnectionclasses to match high-level classes. Previously was 8KiB, now 16KiB. (#​3066 <https://github.com/urllib3/urllib3/issues/3066>__)v2.0.4Compare Source
==================
HTTPHeaderDict(#​2254 <https://github.com/urllib3/urllib3/issues/2254>__)BaseHTTPResponsetourllib3.__all__(#​3078 <https://github.com/urllib3/urllib3/issues/3078>__)urllib3.connection.HTTPConnectionto raise thehttp.client.connectaudit event to have the same behavior as the standard library HTTP client (#​2757 <https://github.com/urllib3/urllib3/issues/2757>__)#​3087 <https://github.com/urllib3/urllib3/issues/3087>__)v2.0.3Compare Source
==================
#​3020 <https://github.com/urllib3/urllib3/issues/3020>__)#​2950 <https://github.com/urllib3/urllib3/pull/2950>_)#​3008 <https://github.com/urllib3/urllib3/issues/3008>__)assert_hostname=Falseto correctly skip hostname check. (#​3051 <https://github.com/urllib3/urllib3/issues/3051>__)v2.0.2Compare Source
==================
HTTPResponse.stream()to continue yielding bytes if buffered decompressed datawas still available to be read even if the underlying socket is closed. This prevents
a compressed response from being truncated. (
#​3009 <https://github.com/urllib3/urllib3/issues/3009>__)v2.0.1Compare Source
==================
#​2991 <https://github.com/urllib3/urllib3/issues/2991>__)HTTPResponse.read(0)was the firstreadcall or when the internal response body buffer was otherwise empty. (#​2998 <https://github.com/urllib3/urllib3/issues/2998>__)v2.0.0Compare Source
==================
Read the
v2.0 migration guide <https://urllib3.readthedocs.io/en/latest/v2-migration-guide.html>__ for help upgrading to the latest version of urllib3.Removed
#​883 <https://github.com/urllib3/urllib3/issues/883>,#​2336 <https://github.com/urllib3/urllib3/issues/2336>).commonNameinmatch_hostname()function.This behavior was deprecated in May 2000 in RFC 2818. Instead only
subjectAltNameis used to verify the hostname by default. To enable verifying the hostname against
commonNameuseSSLContext.hostname_checks_common_name = True(#​2113 <https://github.com/urllib3/urllib3/issues/2113>__).sslmodule compiled with LibreSSL, CiscoSSL,wolfSSL, and all other OpenSSL alternatives. Python is moving to require OpenSSL with PEP 644 (
#​2168 <https://github.com/urllib3/urllib3/issues/2168>__).When an incompatible OpenSSL version is detected an
ImportErroris raised (#​2168 <https://github.com/urllib3/urllib3/issues/2168>__).#​2082 <https://github.com/urllib3/urllib3/issues/2082>__).urllib3.contrib.appengine.AppEngineManagerand support for Google App Engine Standard Environment (#​2044 <https://github.com/urllib3/urllib3/issues/2044>__).Retryoptionsmethod_whitelist,DEFAULT_REDIRECT_HEADERS_BLACKLIST(#​2086 <https://github.com/urllib3/urllib3/issues/2086>__).urllib3.HTTPResponse.from_httplib(#​2648 <https://github.com/urllib3/urllib3/issues/2648>__).Nonefor therequest_contextparameter ofurllib3.PoolManager.connection_from_pool_key. This change should have no effect on users as the default value ofNonewas an invalid option and was never used (#​1897 <https://github.com/urllib3/urllib3/issues/1897>__).urllib3.requestmodule.urllib3.request.RequestMethodshas been made a private API.This change was made to ensure that
from urllib3 import requestimported the top-levelrequest()function instead of the
urllib3.requestmodule (#​2269 <https://github.com/urllib3/urllib3/issues/2269>__).urllib3.contrib.pyopenssleven when support is available from the compiled OpenSSL library (#​2233 <https://github.com/urllib3/urllib3/issues/2233>__).urllib3.contrib.ntlmpoolmodule (#​2339 <https://github.com/urllib3/urllib3/issues/2339>__).DEFAULT_CIPHERS,HAS_SNI,USE_DEFAULT_SSLCONTEXT_CIPHERS, from the private moduleurllib3.util.ssl_(#​2168 <https://github.com/urllib3/urllib3/issues/2168>__).urllib3.exceptions.SNIMissingWarning(#​2168 <https://github.com/urllib3/urllib3/issues/2168>__)._prepare_connmethod fromHTTPConnectionPool. Previously this was only used to callHTTPSConnection.set_cert()byHTTPSConnectionPool(#​1985 <https://github.com/urllib3/urllib3/issues/1985>__).tls_in_tls_requiredproperty fromHTTPSConnection. This is now determined from theschemeparameter inHTTPConnection.set_tunnel()(#​1985 <https://github.com/urllib3/urllib3/issues/1985>__).strictparameter/attribute fromHTTPConnection,HTTPSConnection,HTTPConnectionPool,HTTPSConnectionPool, andHTTPResponse(#​2064 <https://github.com/urllib3/urllib3/issues/2064>__).Deprecated
HTTPResponse.getheaders()andHTTPResponse.getheader()which will be removed in urllib3 v2.1.0. Instead useHTTPResponse.headersandHTTPResponse.headers.get(name, default). (#​1543 <https://github.com/urllib3/urllib3/issues/1543>,#​2814 <https://github.com/urllib3/urllib3/issues/2814>).urllib3.contrib.pyopensslmodule which will be removed in urllib3 v2.1.0 (#​2691 <https://github.com/urllib3/urllib3/issues/2691>__).urllib3.contrib.securetransportmodule which will be removed in urllib3 v2.1.0 (#​2692 <https://github.com/urllib3/urllib3/issues/2692>__).ssl_versionoption in favor ofssl_minimum_version.ssl_versionwill be removed in urllib3 v2.1.0 (#​2110 <https://github.com/urllib3/urllib3/issues/2110>__).strictparameter ofPoolManager.connection_from_context()as it's not longer needed in Python 3.x. It will be removed in urllib3 v2.1.0 (#​2267 <https://github.com/urllib3/urllib3/issues/2267>__)NewConnectionError.poolattribute which will be removed in urllib3 v2.1.0 (#​2271 <https://github.com/urllib3/urllib3/issues/2271>__).format_header_param_html5andformat_header_paramin favor offormat_multipart_header_param(#​2257 <https://github.com/urllib3/urllib3/issues/2257>__).RequestField.header_formatterparameter which will be removed in urllib3 v2.1.0 (#​2257 <https://github.com/urllib3/urllib3/issues/2257>__).HTTPSConnection.set_cert()method. Instead pass parameters to theHTTPSConnectionconstructor (#​1985 <https://github.com/urllib3/urllib3/issues/1985>__).HTTPConnection.request_chunked()method which will be removed in urllib3 v2.1.0. Instead passchunked=TruetoHTTPConnection.request()(#​1985 <https://github.com/urllib3/urllib3/issues/1985>__).Added
urllib3.requestfunction which uses a preconfigured module-globalPoolManagerinstance (#​2150 <https://github.com/urllib3/urllib3/issues/2150>__).jsonparameter tourllib3.request(),PoolManager.request(), andConnectionPool.request()methods to send JSON bodies in requests. Using this parameter will set the headerContent-Type: application/jsonifContent-Typeisn't already defined.Added support for parsing JSON response bodies with
HTTPResponse.json()method (#​2243 <https://github.com/urllib3/urllib3/issues/2243>__).urllib3module (#​1897 <https://github.com/urllib3/urllib3/issues/1897>__).ssl_minimum_versionandssl_maximum_versionoptions which setSSLContext.minimum_versionandSSLContext.maximum_version(#​2110 <https://github.com/urllib3/urllib3/issues/2110>__).zstandard1.18.0 or later is installed.Added the
zstdextra which installs thezstandardpackage (#​1992 <https://github.com/urllib3/urllib3/issues/1992>__).urllib3.response.BaseHTTPResponseclass. All future response classes will be subclasses ofBaseHTTPResponse(#​2083 <https://github.com/urllib3/urllib3/issues/2083>__).FullPoolErrorwhich is raised whenPoolManager(block=True)and a connection is returned to a full pool (#​2197 <https://github.com/urllib3/urllib3/issues/2197>__).HTTPHeaderDictto the top-levelurllib3namespace (#​2216 <https://github.com/urllib3/urllib3/issues/2216>__).When using a
HTTPHeaderDictto provide headers for a request, by default duplicateheader values will be repeated. But if
combine=Trueis passed into a call toHTTPHeaderDict.add, then the added header value will be merged in with an existingvalue into a comma-separated list (
X-My-Header: foo, bar) (#​2242 <https://github.com/urllib3/urllib3/issues/2242>__).NameResolutionErrorexception when a DNS error occurs (#​2305 <https://github.com/urllib3/urllib3/issues/2305>__).proxy_assert_hostnameandproxy_assert_fingerprintkwargs toProxyManager(#​2409 <https://github.com/urllib3/urllib3/issues/2409>__).backoff_maxparameter to theRetryclass.If a custom
backoff_maxis provided to theRetryclass, itwill replace the
Retry.DEFAULT_BACKOFF_MAX(#​2494 <https://github.com/urllib3/urllib3/issues/2494>__).authorityproperty to the Url class as per RFC 3986 3.2. This property should be used in place ofnetlocfor users who want to include the userinfo (auth) component of the URI (#​2520 <https://github.com/urllib3/urllib3/issues/2520>__).schemeparameter toHTTPConnection.set_tunnelto configure the scheme of the origin being tunnelled to (#​1985 <https://github.com/urllib3/urllib3/issues/1985>__).is_closed,is_connectedandhas_connected_to_proxyproperties toHTTPConnection(#​1985 <https://github.com/urllib3/urllib3/issues/1985>__).backoff_jitterparameter toRetry. (#​2952 <https://github.com/urllib3/urllib3/issues/2952>__)Changed
Changed
urllib3.response.HTTPResponse.readto respect the semantics ofio.BufferedIOBaseregardless of compression. Specifically, this method:If you want each
urllib3.response.HTTPResponse.readcall to issue a single system call, you need to disable decompression by settingdecode_content=False(#​2128 <https://github.com/urllib3/urllib3/issues/2128>__).Changed
urllib3.HTTPConnection.getresponseto return an instance ofurllib3.HTTPResponseinstead ofhttp.client.HTTPResponse(#​2648 <https://github.com/urllib3/urllib3/issues/2648>__).Changed
ssl_versionto instead set the correspondingSSLContext.minimum_versionand
SSLContext.maximum_versionvalues. Regardless ofssl_versionpassedSSLContextobjects are now constructed usingssl.PROTOCOL_TLS_CLIENT(#​2110 <https://github.com/urllib3/urllib3/issues/2110>__).Changed default
SSLContext.minimum_versionto beTLSVersion.TLSv1_2in line with Python 3.10 (#​2373 <https://github.com/urllib3/urllib3/issues/2373>__).Changed
ProxyErrorto wrap any connection error (timeout, TLS, DNS) that occurs when connecting to the proxy (#​2482 <https://github.com/urllib3/urllib3/pull/2482>__).Changed
urllib3.util.create_urllib3_contextto not override the system cipher suites witha default value. The new default will be cipher suites configured by the operating system (`#2168 <htt
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Never, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.