https://github.com/happyhackingspace/gakido
Gakido is a high-performance Python HTTP client focused on browser impersonation and anti-bot evasion. It supports Chrome/Firefox/Safari/Edge/Tor-style profiles, JA3/Akamai-like TLS overrides, HTTP/1.1 and HTTP/2, optional native HTTP fast-path, sync and async APIs, multipart uploads, and a minimal WebSocket client.
https://github.com/happyhackingspace/gakido
antibot browser crawling python request security-tools web
Last synced: 4 months ago
JSON representation
Gakido is a high-performance Python HTTP client focused on browser impersonation and anti-bot evasion. It supports Chrome/Firefox/Safari/Edge/Tor-style profiles, JA3/Akamai-like TLS overrides, HTTP/1.1 and HTTP/2, optional native HTTP fast-path, sync and async APIs, multipart uploads, and a minimal WebSocket client.
- Host: GitHub
- URL: https://github.com/happyhackingspace/gakido
- Owner: HappyHackingSpace
- Created: 2026-01-18T13:51:20.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-01-21T18:10:46.000Z (4 months ago)
- Last Synced: 2026-01-23T16:10:47.051Z (4 months ago)
- Topics: antibot, browser, crawling, python, request, security-tools, web
- Language: Python
- Homepage: https://happyhackingspace.github.io/gakido/
- Size: 921 KB
- Stars: 7
- Watchers: 0
- Forks: 0
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
## 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
```bash
pip install gakido
pip install gakido[h3] # with HTTP/3 support
pip install gakido[dev] # development dependencies
```
### Quick start (sync)
```python
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
```python
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
```python
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)
```python
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
```python
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
```python
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
```python
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.