Skip to main content

A lightweight, high concurrency HTTP request library

Project description

reqrio-py

reqrio-py is the Python binding for reqrio, a lightweight and high-concurrency HTTP request library.

Features

  • High-performance HTTP/HTTPS request engine with low-copy semantics.
  • Built-in TLS support using BoringSSL.
  • Supports HTTP/1.1 and HTTP/2.0 via ALPN.
  • Supports custom headers, cookies, timeouts, proxies, and certificate verification.
  • Supports form data, JSON, text, bytes, and multipart file uploads.
  • Includes a WebSocket client wrapper.

Installation

pip install reqrio

Python 3.9 or newer is required.

Quick Start

import reqrio

session = reqrio.Session(
    headers={
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    },
    alpn=reqrio.ALPN.HTTP20,
    verify=True,
)

session.set_timeout(3000, 3000, 3000, 30000)

response = session.get("https://www.example.com")
print(response.statue_code())
print(response.text())

session.close()

API Reference

reqrio.Session

Create a session:

session = reqrio.Session(
    headers=None,
    alpn=reqrio.ALPN.HTTP11,
    verify=True,
    proxy=None,
    key_log=None,
    ja3=None,
    ja4=None,
    client_hello=None,
    random_tls=False,
    custom_tls=None,
    token="",
)

Common methods:

  • session.set_headers(headers: dict)
  • session.add_header(name: str, value: str)
  • session.remove_header(name: str)
  • session.set_timeout(connect, read, write, handle, connect_times=3, handle_times=3)
  • session.set_cookie(cookie: str)
  • session.add_cookie(name: str, value: str)
  • session.get(url, params=None, data=None, json=None, bytes=None, text=None, **kwargs)
  • session.post(url, params=None, data=None, json=None, bytes=None, text=None, **kwargs)
  • session.open_stream(method, url, params=None, data=None, json=None, bytes=None, text=None, **kwargs)
  • session.close()

Helper functions

reqrio also offers shortcut functions for single requests:

resp = reqrio.get(
    "https://www.example.com",
    headers={"User-Agent": "..."},
    params={"q": "test"},
)
print(resp.statue_code())

resp = reqrio.post(
    "https://www.example.com/api",
    headers={"Content-Type": "application/json"},
    json={"key": "value"},
)
print(resp.statue_code())

WebSocket support

from reqrio import WebSocket, WsOpCode

headers = {
    "Origin": "https://example.com",
    "User-Agent": "Mozilla/5.0...",
}

ws = WebSocket(
    "wss://example.com/",
    uri="wss://example.com/api/ws",
    headers=headers,
)
ws.open()

while True:
    frame = ws.read()
    if frame.opcode == WsOpCode.PING:
        ws.write(WsOpCode.PONG, frame.payload)
    else:
        print(frame.payload.decode("utf-8"))

ws.close()

Request Body Types

Supported request bodies:

  • data={...} for form data
  • json={...} for JSON payloads
  • text="..." for plain text
  • bytes=b"..." for raw bytes
  • files=[...] for multipart file upload

File upload example:

files = [
    {
        "path": "./example.txt",
        "field_name": "file",
        "filetype": "text/plain",
    }
]

response = session.post(
    "https://www.example.com/upload",
    data={"name": "test"},
    files=files,
)
print(response.statue_code())

TLS Fingerprinting and Advanced Options

reqrio.Session supports advanced TLS configuration:

  • ja3: JA3 fingerprint string
  • ja4: JA4 fingerprint string
  • client_hello: raw TLS ClientHello bytes
  • random_tls: random TLS fingerprint
  • custom_tls: custom TLS configuration dictionary
  • token: fingerprint authentication token

Additional options:

  • verify=False to disable certificate verification
  • proxy for HTTP/SOCKS proxy support
  • key_log to save TLS key material for debugging

Notes

  • reqrio-py is designed to reuse connections when possible.
  • Be sure to call session.close() to release resources.

License

Apache-2.0

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

reqrio-0.3.0rc1.tar.gz (3.6 MB view details)

Uploaded Source

Built Distribution

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

reqrio-0.3.0rc1-py3-none-any.whl (3.6 MB view details)

Uploaded Python 3

File details

Details for the file reqrio-0.3.0rc1.tar.gz.

File metadata

  • Download URL: reqrio-0.3.0rc1.tar.gz
  • Upload date:
  • Size: 3.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for reqrio-0.3.0rc1.tar.gz
Algorithm Hash digest
SHA256 c38dfd31f326517fecb60f15e44bf65b4db906678cd077d5450cb7f91d38970e
MD5 5a96b941d3a7b014d0292c6cb6610e84
BLAKE2b-256 a6874a7fecae6ad502d6468dfc41323e412eddeda9488dc4f301bcf436be723f

See more details on using hashes here.

File details

Details for the file reqrio-0.3.0rc1-py3-none-any.whl.

File metadata

  • Download URL: reqrio-0.3.0rc1-py3-none-any.whl
  • Upload date:
  • Size: 3.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for reqrio-0.3.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 31fcf173e48dcb9d1564427dc4f85ec906db8eaf0077180639074e5844839a88
MD5 de9c1d4c0fb17708839c74891678209c
BLAKE2b-256 5817171c276e6d2011de83c1dccdaa6fec8ef5f5027a6f936c69dbb915077f8f

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