Repository navigation
ja3requests 2.4.0
2.4.0 adds configurable HTTP/2 encoding and fixes synchronous request handling
across hooks, redirects and proxy tunnels. TLS handshakes and encrypted records
continue to use the project's own protocol engine.
Changes
- Add optional
TlsConfig.h2_huffmanand copiedh2_indexing_exclusions, with
matching synchronous/native async behavior and connection-pool isolation. - Add per-request
h2_headers_priority=(weight, exclusive)across prepared and
upload paths. Dependency remains 0; this is signaling, not a scheduler. - Preserve synchronous 307/308 methods and encoded bodies, including multipart
and replayable uploads. Honor next-hop hook edits, current-hop retries and
source ownership. Correct encoded lengths and first-hop multipart file handling. - Correct proxy TLS/SNI/timeout policy and
h1=TrueALPN/pool selection. Validate
final request methods and transport schemes and keep proxy credentials away
from destination HTTP1/H2 requests. - Add independent installed-client TLS/H2 capture tools and retained Chrome
vectors. Browser-inspired profiles still do not claim full browser identity.
Compatibility
Synchronous 307/308 now preserve method/body instead of following with a bodyless
GET. Use allow_redirects=False and follow explicitly when the old behavior is
required. The 301/302/303 policy is unchanged. Huffman remains disabled by default.
Python >=3.7; runtime dependencies are unchanged.
Validation
The release commit passes 4,499 installed tests plus 118 subtests at 92.66%
statement coverage, installed public typing, strict package metadata checks,
strict documentation and four real loopback examples.
The Python 3.7-3.13 runtime matrix and wheel/tool job
pass at the source commit below. Lint, coverage, public typing, documentation
and dependency graph CI also pass at that commit.
Eight independent installed-client H2 cases verify priority, indexing and reuse.
A fresh Chrome 155/macOS series (three browser samples, sync and async clients)
verifies Huffman literal choices and first-request HPACK block equality under
equivalent inputs; this is not full browser fingerprint equivalence.
Source commit: cdc8ddc94bd2173a8d077133e3d2d902de5dced2.
SHA-256 of the attached artifacts:
ja3requests-2.4.0-py3-none-any.whl:
1381b06fa1b0dbf826029980509ea71a6e45638e411814ffecbb12cc37e0ffb5ja3requests-2.4.0.tar.gz:
c097c8da851af708c8745a899d14645ac8e5702896c11e391308edb289f632c3
Install: python -m pip install ja3requests==2.4.0
See CHANGELOG.md
for the complete scope and behavior limits.