Send local HTTP requests with a byte-exact macOS Safari 26.5 network fingerprint (TLS/HTTP2/HPACK/headers).
Project description
never_safari (Python)
Send local HTTP requests with a byte-exact macOS Safari 26.5 network
fingerprint — TLS ClientHello (JA3/JA4), HTTP/2 (SETTINGS/WINDOW_UPDATE/
pseudo-header order), HPACK (Huffman + dynamic table), request-header order,
download flow-control cadence, and TLS-record framing — like curl_cffi, but for
Safari. Built on a patched BoringSSL + a from-scratch HTTP/2 layer.
Install
pip install never_safari # prebuilt wheels: macOS / Linux / Windows
# or from source (needs cmake, go, ninja, a C/C++ compiler):
pip install maturin && maturin develop -m crates/safari-py/Cargo.toml
Use
import never_safari
# A reusable client keeps cookies + connections (like a browser).
s = never_safari.Client()
r = s.get("https://tls.peet.ws/api/all")
print(r.status, r.ok)
print(r.json()["tls"]["ja4"]) # t13d2013h2_a09f3c656075_7f0f34a4126d
# POST with JSON + custom headers
r = s.post("https://api.example.com/v1/items",
json=b'{"name":"x"}',
headers={"authorization": "Bearer TOKEN"},
referer="https://api.example.com/app")
print(r.status, r.text)
# Options
s = never_safari.Client(
ios=False, # iOS Safari 26 profile (no post-quantum MLKEM768)
proxy="http://user:pass@host:8080",
multiplex=True, # browser-style: concurrent requests share one connection
read_timeout=30.0,
connect_timeout=10.0,
max_redirects=10,
)
# One-shot helpers (throwaway client)
never_safari.get("https://example.com")
never_safari.user_agent()
Response: .status, .ok, .headers (dict), .content (bytes, decoded),
.text, .json(), .resumed, .url.
Client: .get/.post/.request, .clear_cookies(), .clear_pool(),
.clear_session(), .idle_connections.
The network call releases the GIL, so many Python threads can crawl concurrently.
See the project README for the full fingerprint details and scope.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file never_safari-0.1.1-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: never_safari-0.1.1-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1aa28cd87a6c525830c6028b2e546ee3345132d342b3ef1c941b2b393981dced
|
|
| MD5 |
5413d53177121679b0273d1345c3f6a0
|
|
| BLAKE2b-256 |
9dd575a266416e21c1c75c938091871a3279a3e7beb3f32a9ab288abeacaebb6
|
File details
Details for the file never_safari-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: never_safari-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
816cf56a73a5e1b1cf68eab7de64880301c86803e513ca42bc16b60e9e1b7665
|
|
| MD5 |
7c185b3a5a6662b6dcbe203d14e063ad
|
|
| BLAKE2b-256 |
d087c4b70147c2e9439eb9fead99d5098569ca98c84ba6fec7599d5ea0f10669
|
File details
Details for the file never_safari-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: never_safari-0.1.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
16c9e11fa01c9098d1dd012e7ceeec7832828a27f6a6bf4902245b51b4914a09
|
|
| MD5 |
052c0b26f451bd49b397adfb93860887
|
|
| BLAKE2b-256 |
c3384ffc07e738866964655f71fe8c3cd19efe273e8a4c652723b2a99b8d6041
|
File details
Details for the file never_safari-0.1.1-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: never_safari-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c3d4ab4812ed46993b24b352d1076d16f78363816c4007264e721c49decd53e6
|
|
| MD5 |
79d8f38c4c886b773ad95a0d442304e0
|
|
| BLAKE2b-256 |
236e2148fb36218b294295258a1a9d3c84bed86d0e4481c466bf85c03f0f7247
|
File details
Details for the file never_safari-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: never_safari-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.3 MB
- Tags: CPython 3.9+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.11
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90b651ac8915b2575ba87b61df8e1bfcddb43899dac5ad16194b26b105121552
|
|
| MD5 |
a0bc9bfe4cf1c9ac1d5d4474d2a395db
|
|
| BLAKE2b-256 |
39343c217f13e1ce13c7a6cee3035cf66eb4336078a6ba3340e93fe0170ab8f3
|