Skip to content

ja3requests 2.4.0

Choose a tag to compare

@lxjmaster lxjmaster released this 15 Oct 06:20
· 1 commit to master since this release

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_huffman and copied h2_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=True ALPN/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:
    1381b06fa1b0dbf826029980509ea71a6e45638e411814ffecbb12cc37e0ffb5
  • ja3requests-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.