Configuration Guide

RequestX provides flexible configuration options for timeouts, proxies, SSL, authentication, and more.

Client Configuration

The Client and AsyncClient classes accept various configuration options:

import requestx

client = requestx.Client(
    base_url="https://api.example.com",
    headers={"User-Agent": "MyApp/1.0"},
    cookies={"session": "abc123"},
    timeout=requestx.Timeout(timeout=30.0, connect=5.0),
    follow_redirects=True,
    max_redirects=10,
    verify_ssl=True,
    http2=True,
)

Timeout Configuration

Configure timeouts using the Timeout class:

import requestx

# Simple timeout (applies to all operations)
timeout = requestx.Timeout(timeout=30.0)

# Granular timeouts
timeout = requestx.Timeout(
    timeout=30.0,      # Total timeout
    connect=5.0,       # Connection timeout
    read=10.0,         # Read timeout
    write=10.0,        # Write timeout
    pool=5.0,          # Pool timeout
)

# Use with requests
response = requestx.get("https://httpbin.org/get", timeout=timeout)

# Use with client
with requestx.Client(timeout=timeout) as client:
    response = client.get("/endpoint")

Timeout Values

Parameter Description Default
timeout Total request timeout None
connect Connection establishment timeout None
read Time to wait for data None
write Time to wait for sending data None
pool Time to wait for a connection from pool None

Headers Configuration

Set default headers for all requests:

import requestx

# Using dict
headers = {"Authorization": "Bearer token", "User-Agent": "MyApp/1.0"}

# Using Headers class
headers = requestx.Headers({"Content-Type": "application/json"})
headers.set("X-Custom-Header", "value")

# Apply to client
with requestx.Client(headers=headers) as client:
    response = client.get("https://api.example.com/data")

Cookies Configuration

Manage cookies across requests:

import requestx

# Using dict
cookies = {"session": "abc123", "user": "john"}

# Using Cookies class
cookies = requestx.Cookies({"session": "abc123"})
cookies.set("preference", "dark_mode")

# Apply to client
with requestx.Client(cookies=cookies) as client:
    response = client.get("https://api.example.com/profile")

Authentication

RequestX supports various authentication methods:

Basic Authentication

import requestx

auth = requestx.Auth.basic("username", "password")

response = requestx.get(
    "https://httpbin.org/basic-auth/user/pass",
    auth=auth
)

Bearer Token Authentication

import requestx

auth = requestx.Auth.bearer("your-api-token")

response = requestx.get(
    "https://api.example.com/protected",
    auth=auth
)

Using with Client

import requestx

with requestx.Client(auth=requestx.Auth.bearer("token")) as client:
    response = client.get("https://api.example.com/data")

Proxy Configuration

Configure HTTP/HTTPS proxies:

import requestx

# Single proxy for all protocols
proxy = requestx.Proxy(url="http://proxy.example.com:8080")

# Proxy with authentication
proxy = requestx.Proxy(
    url="http://proxy.example.com:8080",
    username="user",
    password="pass"
)

# Apply to client
with requestx.Client(proxy=proxy) as client:
    response = client.get("https://api.example.com/data")

SSL/TLS Configuration

Configure SSL verification and certificates:

import requestx

# Disable SSL verification (not recommended for production)
with requestx.Client(verify_ssl=False) as client:
    response = client.get("https://self-signed.example.com")

# Use custom CA bundle
with requestx.Client(ca_bundle="/path/to/ca-bundle.crt") as client:
    response = client.get("https://internal.example.com")

# Use client certificate
with requestx.Client(cert_file="/path/to/client.pem") as client:
    response = client.get("https://mtls.example.com")

HTTP/2 Configuration

Enable HTTP/2 support:

import requestx

# Enable HTTP/2
with requestx.Client(http2=True) as client:
    response = client.get("https://http2.example.com")

Redirect Configuration

Control redirect behavior:

import requestx

# Disable redirects
response = requestx.get(
    "https://httpbin.org/redirect/3",
    follow_redirects=False
)

# Limit redirects
with requestx.Client(
    follow_redirects=True,
    max_redirects=5
) as client:
    response = client.get("https://httpbin.org/redirect/3")

Connection Limits

Configure connection pool limits:

import requestx

limits = requestx.Limits(
    max_connections=100,
    max_keepalive_connections=20,
    keepalive_expiry=30.0,
)

with requestx.Client(limits=limits) as client:
    response = client.get("https://api.example.com/data")

Environment Variables

RequestX can read configuration from environment variables when trust_env=True:

import requestx

# Trust environment variables for proxy and SSL settings
with requestx.Client(trust_env=True) as client:
    response = client.get("https://api.example.com/data")

Supported environment variables:

Variable Description
HTTP_PROXY HTTP proxy URL
HTTPS_PROXY HTTPS proxy URL
NO_PROXY Comma-separated list of hosts to bypass proxy
SSL_CERT_FILE Path to CA certificate bundle

Complete Example

import requestx

# Full client configuration
client = requestx.Client(
    base_url="https://api.example.com",
    headers={
        "User-Agent": "MyApp/1.0",
        "Accept": "application/json",
    },
    cookies={"session": "abc123"},
    timeout=requestx.Timeout(
        timeout=30.0,
        connect=5.0,
        read=15.0,
    ),
    auth=requestx.Auth.bearer("api-token"),
    follow_redirects=True,
    max_redirects=10,
    verify_ssl=True,
    http2=True,
    trust_env=False,
)

with client:
    # All requests inherit the configuration
    users = client.get("/users").json()
    profile = client.get("/profile").json()

    # Override per-request
    response = client.post(
        "/upload",
        headers={"Content-Type": "multipart/form-data"},
        timeout=requestx.Timeout(timeout=120.0),
    )