Skip to main content

High-performance CPython HTTP client with browser impersonation.

Project description

Gakido

High-performance CPython HTTP client focused on browser impersonation, anti-bot evasion, and speed.

Features

  • Browser profiles (Chrome/Firefox/Safari/Edge/Tor aliases)
  • JA3/Akamai-style TLS overrides (tls_configuration_options, ExtraFingerprints)
  • HTTP/1.1, HTTP/2, and HTTP/3 (QUIC) support
  • HTTP/3 optimized for Cloudflare and CDN targets
  • Automatic compression (gzip, deflate, brotli) with profile-based Accept-Encoding
  • Sync + async clients, connection pooling
  • Multipart uploads
  • Minimal WebSocket client
  • Optional native HTTP fast-path (gakido_core, HTTP only)

Install

pip install gakido
pip install gakido[h3]     # with HTTP/3 support
pip install gakido[dev]    # development dependencies

Quick start (sync)

from gakido import Client

c = Client(impersonate="chrome_120")  # force_http1 defaults to True
r = c.get("https://example.com")
print(r.status_code, r.text[:200])

Async

import asyncio
from gakido.aio import AsyncClient

async def main():
    async with AsyncClient(impersonate="chrome_120") as c:
        r = await c.get("https://httpbin.org/get")
        print(r.status_code)

asyncio.run(main())

Multipart upload

files = {"file": ("test.txt", b"hello", "text/plain")}
data = {"foo": "bar"}
with Client() as c:
    r = c.post("https://httpbin.org/post", data=data, files=files)
    print(r.json())

TLS overrides (JA3-like)

from gakido import Client, ExtraFingerprints

ja3_str = "771,4866-4867-4865-49196,0-11-10,29,0"
extra_fp = ExtraFingerprints(alpn=["http/1.1"])

c = Client(
    impersonate="chrome_120",
    tls_configuration_options={"ja3_str": ja3_str, "extra_fp": extra_fp},
)
r = c.get("https://tls.browserleaks.com/json")
print(r.json().get("ja3_hash"))

WebSocket

from gakido.websocket import WebSocket

ws = WebSocket.connect("echo.websocket.events", 443, "/", headers=[], tls=True)
ws.send_text("hello")
op, payload = ws.recv()
print(payload.decode(errors="ignore"))
ws.close()

Proxies

from gakido import Client

c = Client(proxies=["http://127.0.0.1:8080"])
r = c.get("http://httpbin.org/ip")  # HTTP proxy only
print(r.text)

HTTP/3 (QUIC) for Cloudflare/CDN

import asyncio
from gakido import AsyncClient, is_http3_available

async def main():
    print(f"HTTP/3 available: {is_http3_available()}")

    async with AsyncClient(
        impersonate="chrome_120",
        http3=True,           # Enable HTTP/3
        http3_fallback=True,  # Fall back to H1/H2 if H3 fails
    ) as c:
        r = await c.get("https://cloudflare.com/cdn-cgi/trace")
        print(f"HTTP/{r.http_version}: {r.status_code}")

asyncio.run(main())

Notes

  • force_http1=True by default for compatibility; set force_http1=False to allow ALPN h2.
  • http3=True enables HTTP/3 (QUIC) for compatible targets (requires pip install gakido[h3]).
  • auto_decompress=True by default: uses profile's Accept-Encoding (gzip, deflate, br) and auto-decompresses responses.
  • Set auto_decompress=False to disable compression and receive raw responses.
  • Native core (gakido_core) is HTTP-only; HTTPS still uses the Python path.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gakido-0.1.0.tar.gz (27.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

gakido-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (57.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

gakido-0.1.0-cp313-cp313-macosx_11_0_arm64.whl (37.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

gakido-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (57.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

gakido-0.1.0-cp312-cp312-macosx_11_0_arm64.whl (37.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

gakido-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (54.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.5+ x86-64

gakido-0.1.0-cp311-cp311-macosx_11_0_arm64.whl (37.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file gakido-0.1.0.tar.gz.

File metadata

  • Download URL: gakido-0.1.0.tar.gz
  • Upload date:
  • Size: 27.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for gakido-0.1.0.tar.gz
Algorithm Hash digest
SHA256 26c173a35c994ea3b746c692f034dd5535f8d4967dc4cf59a12cb660a8a55dba
MD5 991ae7f4df7ff26c725dfb767cedfdd2
BLAKE2b-256 7c398b92e79561a5acc5f735af02ce899f67c34925c120263879db81d7574902

See more details on using hashes here.

File details

Details for the file gakido-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gakido-0.1.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 edb23e114f0a93ddcd7db27114169cc202b79ca1337b18943d26c6ec98528555
MD5 b6608ec77cb5fb90bd8acd82a99ff1d5
BLAKE2b-256 68c4344322d0ec577dd2bebf9920daa72fcf272cf022db4947a728047bcd3c55

See more details on using hashes here.

File details

Details for the file gakido-0.1.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gakido-0.1.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 56b33f48271063c1502a1cee8f89361cae89e9956d5756e5d2682e771a028762
MD5 c118d783e00fcd330716424cb63e4152
BLAKE2b-256 f5193750d22141da1c3787b99c92574c0e8d41caaa3a1b73f83e9f1ac746909e

See more details on using hashes here.

File details

Details for the file gakido-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gakido-0.1.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2fd179f36574a7753af932018720d7d548d52482d9e4d58af13f767d89909cb2
MD5 5225cc4333f00e1362ab13a1dda2a6e9
BLAKE2b-256 10bab9e9dfe04bdd01156ebf02e2569086306f4034bf29755f6b5dcb6ead50dd

See more details on using hashes here.

File details

Details for the file gakido-0.1.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gakido-0.1.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c7b33888d558e9448eb4faab887202919e217909954b4ecee2f8214890a20f84
MD5 326b30085ea58310b10df1450fccc499
BLAKE2b-256 cb8848e9eb7e27b85e9cc6e20d6ff961c4633e94c1be7dad4ac988b32aacbb45

See more details on using hashes here.

File details

Details for the file gakido-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for gakido-0.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 48b5d952f1dcbfb8f870d16db8f1a559fd8b0c460e660975f3fdff8990905820
MD5 9012abc950acc866e3e421ca06dc2ee1
BLAKE2b-256 7cc31f9e3bb9e57ea0ad7ee96d3bdcf9a6f3cd87dc4fe24525acdfb2e0743edf

See more details on using hashes here.

File details

Details for the file gakido-0.1.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for gakido-0.1.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8a74663e411276f0edeabc771598f4ac6d30419cb87f845122a4cfa165572f5f
MD5 b45ad867aa4177f618891a4145f2e326
BLAKE2b-256 d8ded3742dd1c4d820abf7d80f18d3b0eada62f9ebf0ecbbbde1782620b234f3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page