Skip to main content

Stealth HTTP Engine for Python

Project description

bequests-logo

# Bequests

**Honestly, we're all tired of spending 3 hours debugging headers only to get slapped with a 403.** Bequests was born from a simple fact: making HTTP requests that actually fly under the radar has become a chore. This library isn't just another wrapper—it's an engine that handles the "dirty" work (TLS Fingerprinting, header ordering, hardware simulation) so you can focus on your data.


## Why Bequests instead of Requests??

* **TLS Fingerprinting that actually works**: Powered by curl\_cffi, we perfectly mimic real JA3/HTTP2 fingerprints from Chrome 120 and Safari 15.5.

* **Built-in Tor Support**: Native tunneling through the Tor network for maximum anonymity.

* **Layered Protection System**: No need to reinvent the wheel. Activate MAX or NUCLEAR layers depending on how tough the WAF is.

* **Passive Recon**: The engine recognizes signatures from Cloudflare, Akamai, or Datadome and adjusts its behavior automatically.

* **Hardware Simulation**: We inject real telemetry (Canvas, RAM, Viewport) to prove to the site that you're a human on a browser, not a script in a terminal.

* **Smart Features**: Life-savers like smart\_json (doesn't crash on weird chars) and a vault system to keep your sessions alive.


## Quick Start

### Standard Stealth Request

from bequests import Bequests, MAX\_LAYER



\# Fire up the engine

bot = Bequests(logged=True)



\# Max stealth + human-like navigation (favicon, robots.txt, etc.)

bot.layers(MAX\_LAYER).imit\_nav(True)



\# Fetch data, Bequests handles the bypass

resp = bot.get("\[https://target-website.com](https://target-website.com)")

print(resp.text)

### TOR Integration

\# Just toggle use\_tor to True (assumes Tor is running on default port 9050)

bot = Bequests(use\_tor=True, logged=True)

resp = bot.get("\[https://check.torproject.org](https://check.torproject.org)")

###Async Version

import asyncio

from bequests import AsyncBequests



async def main():

    bot = AsyncBequests(logged=True)

    

    # Generate some noise to warm up cookies

    await bot.generate\_noise(count=3)

    

    # Clean async request

    resp = await bot.get("\[https://api.example.com/data](https://api.example.com/data)")

    data = await bot.smart\_json(resp.url)

    print(data)



asyncio.run(main())

### Protection Layers Guide

| Layer | Level | Features Included |

| :--- | :--- | :--- |

| **LOWER** | Basic | Identity (UA) + Jitter (random delays) |

| **MEDIUM** | Standard | LOWER + Header ordering consistency (Client Hints) |

| **MAX** | Professional | MEDIUM + Canvas/Hardware simulation + Cookie Warmup |

| **NUCLEAR** | Final Boss | MAX + Automatic pivot through Google Cache if still blocked |


## ⚙️ Under the Hood

### Session Management (Vault)

Bequests manages a bequests\_vault.json file. Your cookies are automatically saved after each success, allowing you to maintain "warm" sessions over the long term.

### Rate Limiting & Proxies

* **Auto-Rotation**: The engine can rotate your proxies automatically upon block detection.

* **Tor Tunnel**: Simple toggle for SOCKS5h routing.

* **Limits**: Use bot.set\_rate\_limit(requests=10, per\_seconds=60) to stay under the server's radar.

### Performance Tracking

To know if your tunnel is efficient, use bot.get\_stats() to monitor real success rates and the types of WAFs encountered.


## License

MIT. Use it wisely.


**Got an idea to improve the engine?** Feel free to open an Issue or suggest a custom Hook!

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

bequests-0.1.0.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

bequests-0.1.0-py2.py3-none-any.whl (11.2 kB view details)

Uploaded Python 2Python 3

File details

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

File metadata

  • Download URL: bequests-0.1.0.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for bequests-0.1.0.tar.gz
Algorithm Hash digest
SHA256 81749588c22dc188bbff495eaea19b7c3b7f85b317a1db0097d27a1bc96dc4b8
MD5 9dc755641deb98c56c134a10d190ed8c
BLAKE2b-256 fe5b16bdb6eae310016993d9a69bec2f50e500bdad4f01dee7e6ab891729d17e

See more details on using hashes here.

File details

Details for the file bequests-0.1.0-py2.py3-none-any.whl.

File metadata

  • Download URL: bequests-0.1.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for bequests-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 fdf3036b062d3f649ccfd769feae0c6c16d45fcc1087f1897fce319e3b5c57f0
MD5 8d060d794fb0d14ca5e877141756dc78
BLAKE2b-256 0f5201b820193fd186040e942f09be9f602e0f3b627c819ba9476676a15337e5

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