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 datajson={...}for JSON payloadstext="..."for plain textbytes=b"..."for raw bytesfiles=[...]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 stringja4: JA4 fingerprint stringclient_hello: raw TLS ClientHello bytesrandom_tls: random TLS fingerprintcustom_tls: custom TLS configuration dictionarytoken: fingerprint authentication token
Additional options:
verify=Falseto disable certificate verificationproxyfor HTTP/SOCKS proxy supportkey_logto save TLS key material for debugging
Notes
reqrio-pyis designed to reuse connections when possible.- Be sure to call
session.close()to release resources.
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c38dfd31f326517fecb60f15e44bf65b4db906678cd077d5450cb7f91d38970e
|
|
| MD5 |
5a96b941d3a7b014d0292c6cb6610e84
|
|
| BLAKE2b-256 |
a6874a7fecae6ad502d6468dfc41323e412eddeda9488dc4f301bcf436be723f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31fcf173e48dcb9d1564427dc4f85ec906db8eaf0077180639074e5844839a88
|
|
| MD5 |
de9c1d4c0fb17708839c74891678209c
|
|
| BLAKE2b-256 |
5817171c276e6d2011de83c1dccdaa6fec8ef5f5027a6f936c69dbb915077f8f
|