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.

Release files for gakido 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gakido 0.1.5
File Size Uploaded
gakido-0.1.5.tar.gz 85.2 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for gakido 0.1.5
File
gakido-0.1.5-py3-none-any.whl Python 3 none any Details
gakido-0.1.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.5+ x86-64 Details
gakido-0.1.5-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
gakido-0.1.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.5+ x86-64, Linux glibc 2.28+ x86-64 Details
gakido-0.1.5-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
gakido-0.1.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.5+ x86-64 Details
gakido-0.1.5-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details

Total release size: 557.3 kB

Release files / gakido-0.1.5.tar.gz

Download URL gakido-0.1.5.tar.gz
Size 85.2 kB
Tags Source
SHA-256 checksum
How to use checksums
c9490f2624ed97b3573e3dfc981f77dcf324426b1e42571b6a0c1559c58bec36
BLAKE2b-256 checksum
How to use checksums
50f87199d32cb91c3efc00a32358c1e4c84e4348843806e3a0acb6bfacead782
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / gakido-0.1.5-py3-none-any.whl

Download URL gakido-0.1.5-py3-none-any.whl
Size 53.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9576b1f264aa261f1b21fb3921134d0c1c5c97afdedb9e7362b677b819382b4f
BLAKE2b-256 checksum
How to use checksums
962b697a048186d5c26ecca8bf6215e5c014dfe97009b5502ecf21fd8c846309
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.10

Release files / gakido-0.1.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl

Download URL gakido-0.1.5-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Size 79.3 kB
Tags CPython 3.13 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
e5faadf9ee72ee62f27752a00306a337837454958c3d61fda0762c472823d55c
BLAKE2b-256 checksum
How to use checksums
d8d67dfb74e6479180643b01b8ddfef14fe9aad2b9a3ec59885bcedb33b13772
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / gakido-0.1.5-cp313-cp313-macosx_11_0_arm64.whl

Download URL gakido-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Size 61.0 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8f87a8a2c9155f51b646cd0379037ab91de1ed4c891eb5939325a56e6479e53d
BLAKE2b-256 checksum
How to use checksums
a7025b26d1d8116343b087b6f75ada159efda7ba22286d0c01af7d6240141d29
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / gakido-0.1.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl

Download URL gakido-0.1.5-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Size 79.3 kB
Tags CPython 3.12 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
8c434e7335f250574fd4d1212acd10c03634abb8c29587ddb3b926dfd12d7ded
BLAKE2b-256 checksum
How to use checksums
d3a88930aa29b4f3f834fde352bb672eb068bd1b23b5ad96c228db175d2b54ce
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / gakido-0.1.5-cp312-cp312-macosx_11_0_arm64.whl

Download URL gakido-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Size 61.0 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0a0b2d4dcb75c4e68695dc8b545f010d48628d7fdb79db89ad37582ad8c58e96
BLAKE2b-256 checksum
How to use checksums
354e2e0da548c4fe5f7f54e4189e7a4b78da8e93816e776da845600065bd5479
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release files / gakido-0.1.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl

Download URL gakido-0.1.5-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl
Size 77.1 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64 Linux glibc 2.5+ x86-64
SHA-256 checksum
How to use checksums
788859ca506c04fabf9f37d705d8f54d6f176e1d7185fdf7ccd998d5e2ebddac
BLAKE2b-256 checksum
How to use checksums
94d8282fed80d1762ac675ca3a62317fe1885f92edf422bd85c66fab91473124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.13

Release files / gakido-0.1.5-cp311-cp311-macosx_11_0_arm64.whl

Download URL gakido-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Size 61.1 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8305f56269b25c4316af535b3e2954a363313fb7fa8bc1dbd4131795abcf5771
BLAKE2b-256 checksum
How to use checksums
1f7ff1cc2aa281ce0a438f461acd3be633ed253076a3d0cafbed1451b09cf67c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.4

Release history Release notifications | RSS feed

This release

0.1.5 This release

8 release files

0.1.4

7 release files

0.1.3

4 release files

0.1.1

10 release files

0.1.0

7 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page