Skip to main content

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)
  • 96 browser profiles (24 base + 72 aliases) for Chrome, Firefox, Safari, Edge, Opera, Brave, Vivaldi, Tor
  • Antibot benchmark for testing impersonation against detection systems

Install

pip:

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

uv:

uv add gakido
uv add gakido[h3]          # with HTTP/3 support
uv add 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

gakido supports HTTP, SOCKS5, and SOCKS5H proxies for both sync and async clients.

from gakido import Client, AsyncClient

# Sync client with HTTP or SOCKS5 proxy
c = Client()
r = c.get("http://httpbin.org/ip", proxy="http://127.0.0.1:8080")
r = c.get("http://httpbin.org/ip", proxy="socks5://127.0.0.1:1080")
r = c.get("http://httpbin.org/ip", proxy="socks5h://user:pass@127.0.0.1:1080")  # proxy resolves hostname
print(r.text)

# Async client with proxy pool
async_client = AsyncClient(proxy_pool=[
    "http://proxy1:8080",
    "socks5://proxy2:1080",
    "socks5h://user:pass@proxy3:1080",
])
r = await async_client.get("http://httpbin.org/ip")
print(r.text)

Retry with Exponential Backoff

gakido supports configurable retry with exponential backoff for both sync and async clients.

from gakido import Client, AsyncClient
import time

# Sync client with retry
client = Client(
    max_retries=3,           # Up to 3 retry attempts (4 total attempts)
    retry_base_delay=0.5,    # Start with 0.5s delay
    retry_max_delay=30.0,    # Cap delay at 30s
    retry_jitter=True,       # Add random jitter to avoid thundering herd
)
try:
    resp = client.get("http://flaky.example.com")
except Exception as e:
    print(f"Failed after retries: {e}")

# Async client with retry
async_client = AsyncClient(
    max_retries=2,
    retry_base_delay=1.0,
    retry_jitter=False,  # Predictable delays for testing
)
resp = await async_client.get("http://api.example.com")

# Retryable status codes (by default): 408, 429, 500, 502, 503, 504, 507, 511
# Retryable exceptions (by default): ConnectionError, TimeoutError, OSError

See [Retry Documentation](docs/retry.md) for detailed information about retry options and best practices.

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.

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.5.tar.gz (85.2 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.5-py3-none-any.whl (53.2 kB view details)

Uploaded Python 3

gakido-0.1.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (79.3 kB view details)

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

gakido-0.1.5-cp313-cp313-macosx_11_0_arm64.whl (61.0 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

gakido-0.1.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (79.3 kB view details)

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

gakido-0.1.5-cp312-cp312-macosx_11_0_arm64.whl (61.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

gakido-0.1.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl (77.1 kB view details)

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

gakido-0.1.5-cp311-cp311-macosx_11_0_arm64.whl (61.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for gakido-0.1.5.tar.gz
Algorithm Hash digest
SHA256 c9490f2624ed97b3573e3dfc981f77dcf324426b1e42571b6a0c1559c58bec36
MD5 ead771cff9b862d7326ecbd8dc0ab296
BLAKE2b-256 50f87199d32cb91c3efc00a32358c1e4c84e4348843806e3a0acb6bfacead782

See more details on using hashes here.

File details

Details for the file gakido-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: gakido-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 53.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for gakido-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 9576b1f264aa261f1b21fb3921134d0c1c5c97afdedb9e7362b677b819382b4f
MD5 96083178889531ae9ba13f93a78fe762
BLAKE2b-256 962b697a048186d5c26ecca8bf6215e5c014dfe97009b5502ecf21fd8c846309

See more details on using hashes here.

File details

Details for the file gakido-0.1.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for gakido-0.1.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 e5faadf9ee72ee62f27752a00306a337837454958c3d61fda0762c472823d55c
MD5 c59375b330455b0555841ed67a319c2c
BLAKE2b-256 d8d67dfb74e6479180643b01b8ddfef14fe9aad2b9a3ec59885bcedb33b13772

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gakido-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f87a8a2c9155f51b646cd0379037ab91de1ed4c891eb5939325a56e6479e53d
MD5 54b02d36dcfd9cfe80e339a92b43d5fa
BLAKE2b-256 a7025b26d1d8116343b087b6f75ada159efda7ba22286d0c01af7d6240141d29

See more details on using hashes here.

File details

Details for the file gakido-0.1.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for gakido-0.1.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 8c434e7335f250574fd4d1212acd10c03634abb8c29587ddb3b926dfd12d7ded
MD5 50b7de98b756e4ad5fcf0d4d3616a338
BLAKE2b-256 d3a88930aa29b4f3f834fde352bb672eb068bd1b23b5ad96c228db175d2b54ce

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gakido-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a0b2d4dcb75c4e68695dc8b545f010d48628d7fdb79db89ad37582ad8c58e96
MD5 b2be4de6dd2718845bd858332e84e952
BLAKE2b-256 354e2e0da548c4fe5f7f54e4189e7a4b78da8e93816e776da845600065bd5479

See more details on using hashes here.

File details

Details for the file gakido-0.1.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl.

File metadata

File hashes

Hashes for gakido-0.1.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Algorithm Hash digest
SHA256 788859ca506c04fabf9f37d705d8f54d6f176e1d7185fdf7ccd998d5e2ebddac
MD5 eea5c523e5ee9fa70c0e3ed63f5c4323
BLAKE2b-256 94d8282fed80d1762ac675ca3a62317fe1885f92edf422bd85c66fab91473124

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gakido-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8305f56269b25c4316af535b3e2954a363313fb7fa8bc1dbd4131795abcf5771
MD5 1a7b32983fcb11388f8a9748cff31d96
BLAKE2b-256 1f7ff1cc2aa281ce0a438f461acd3be633ed253076a3d0cafbed1451b09cf67c

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.5 This release

8 files

0.1.4

7 files

0.1.3

4 files

0.1.1

10 files

0.1.0

7 files

Supported by

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