{"id":5458,"library":"rnet","title":"Rnet: Blazing-Fast HTTP Client with TLS Fingerprinting","description":"Rnet is a high-performance Python HTTP client built with Rust bindings, specializing in advanced TLS fingerprinting. It accurately emulates the TLS and HTTP/2 signatures of various popular browsers like Chrome, Firefox, Safari, Opera, and OkHttp, enabling it to bypass sophisticated anti-bot detection systems. Rnet provides both asynchronous and synchronous client interfaces and is designed for speed and reliability in web scraping, API testing, and automation tasks. The current stable version is 2.4.2, with active development on 3.x release candidates, indicating a continuous and rapid release cadence.","status":"active","version":"2.4.2","language":"en","source_language":"en","source_url":"https://github.com/0x676e67/rnet","tags":["http client","tls fingerprinting","browser emulation","scraping","async","rust","networking"],"install":[{"cmd":"pip install rnet","lang":"bash","label":"Install stable version"}],"dependencies":[],"imports":[{"note":"Main asynchronous client for making requests.","symbol":"Client","correct":"from rnet import Client"},{"note":"Synchronous client for simpler use cases.","symbol":"BlockingClient","correct":"from rnet import BlockingClient"},{"note":"For `v2.x`, use `Impersonate` for browser emulation profiles. In `v3.x` release candidates, this enum was renamed to `Emulation`.","wrong":"from rnet import Emulation","symbol":"Impersonate","correct":"from rnet import Impersonate"}],"quickstart":{"code":"import asyncio\nfrom rnet import Client, Impersonate\n\nasync def main():\n    # Build a client impersonating Firefox 139\n    client = Client(impersonate=Impersonate.Firefox139)\n    \n    # Make a GET request\n    resp = await client.get(\"https://tls.peet.ws/api/all\")\n    \n    # Print the response status and text\n    print(f\"Status: {resp.status_code}\")\n    print(await resp.text())\n\nif __name__ == \"__main__\":\n    asyncio.run(main())","lang":"python","description":"This asynchronous example demonstrates how to create a client, specify a browser to impersonate for TLS/HTTP2 fingerprinting, and make a basic GET request. It then prints the HTTP status code and the response body. The `Impersonate` enum is used to select the desired browser profile."},"warnings":[{"fix":"Update `from rnet import Impersonate` to `from rnet import Emulation` and change usage from `Impersonate.BrowserVersion` to `Emulation.BrowserVersion`.","message":"The `Impersonate` enum, used to specify browser profiles for TLS fingerprinting, has been renamed to `Emulation` in `v3.x` release candidates. Code written for `v2.x` using `Impersonate` will break when upgrading to `v3.x`.","severity":"breaking","affected_versions":">=3.0.0-rc.X"},{"fix":"For production systems, consider pinning to a `2.x` version until `3.0.0` is officially stable, or thoroughly test `3.x` RCs in your environment.","message":"Version `3.0.0` of `rnet` is currently in a release candidate (RC) phase. While the API is stabilizing, minor changes may still occur before the final `3.0.0` stable release. Users should be aware of potential breaking changes when upgrading between RCs or to the final stable version.","severity":"gotcha","affected_versions":"3.0.0-rc.X"},{"fix":"Prefer installing `rnet` via `pip` to utilize pre-built wheels. If building from source is necessary, refer to the official GitHub repository for detailed instructions on setting up the Rust and BoringSSL build environments.","message":"Building `rnet` from source (e.g., if pre-compiled wheels are not available for your specific platform/Python version) requires a Rust toolchain and a properly set up BoringSSL build environment. This can be complex to configure compared to a standard `pip install`.","severity":"gotcha","affected_versions":"All"}],"env_vars":null,"last_verified":"2026-04-13T00:00:00.000Z","next_check":"2026-07-12T00:00:00.000Z"}