Basic Usage Examples

This page contains common usage patterns for RequestX.

Simple GET Request

import requestx

response = requestx.get("https://httpbin.org/get")
print(f"Status: {response.status_code}")
print(f"JSON: {response.json()}")

POST with JSON Data

import requestx

response = requestx.post(
    "https://httpbin.org/post",
    json={
        "name": "John Doe",
        "email": "john@example.com",
        "age": 30
    }
)

data = response.json()
print(f"Sent: {data['json']}")

POST with Form Data

import requestx

response = requestx.post(
    "https://httpbin.org/post",
    data={
        "username": "johndoe",
        "password": "secret123"
    }
)

data = response.json()
print(f"Form: {data['form']}")

Custom Headers

import requestx

response = requestx.get(
    "https://httpbin.org/headers",
    headers={
        "User-Agent": "MyApp/1.0",
        "Accept": "application/json",
        "X-Custom-Header": "custom-value"
    }
)

print(response.json()["headers"])

Query Parameters

import requestx

response = requestx.get(
    "https://httpbin.org/get",
    params={
        "search": "python",
        "page": 1,
        "limit": 10
    }
)

print(f"URL: {response.url}")
# https://httpbin.org/get?search=python&page=1&limit=10

Using Client with Base URL

import requestx

with requestx.Client(base_url="https://jsonplaceholder.typicode.com") as client:
    # GET all users
    users = client.get("/users").json()
    print(f"Found {len(users)} users")

    # GET single user
    user = client.get("/users/1").json()
    print(f"User: {user['name']}")

    # GET user's posts
    posts = client.get("/users/1/posts").json()
    print(f"User has {len(posts)} posts")

Authentication

Basic Auth

import requestx

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

print(f"Authenticated: {response.json()['authenticated']}")

Bearer Token

import requestx

response = requestx.get(
    "https://httpbin.org/bearer",
    auth=requestx.Auth.bearer("my-secret-token")
)

print(f"Token: {response.json()['token']}")

Error Handling

import requestx
from requestx import HTTPStatusError, ConnectError, TimeoutException

def fetch_user(user_id: int) -> dict:
    try:
        response = requestx.get(
            f"https://jsonplaceholder.typicode.com/users/{user_id}",
            timeout=5.0
        )
        response.raise_for_status()
        return response.json()

    except HTTPStatusError as e:
        if e.response.status_code == 404:
            print(f"User {user_id} not found")
            return None
        raise

    except TimeoutException:
        print("Request timed out")
        raise

    except ConnectError:
        print("Could not connect to server")
        raise

# Usage
user = fetch_user(1)
if user:
    print(f"User: {user['name']}")

Timeout Configuration

import requestx

# Simple timeout
response = requestx.get(
    "https://httpbin.org/delay/1",
    timeout=5.0
)

# Detailed timeout
timeout = requestx.Timeout(
    timeout=30.0,  # Total timeout
    connect=5.0,   # Connection timeout
    read=15.0,     # Read timeout
)

response = requestx.get(
    "https://httpbin.org/delay/2",
    timeout=timeout
)

Session Cookies

import requestx

with requestx.Client() as client:
    # Set cookies via request
    client.get("https://httpbin.org/cookies/set/session/abc123")

    # Subsequent requests include the cookie
    response = client.get("https://httpbin.org/cookies")
    print(response.json()["cookies"])  # {'session': 'abc123'}

Redirect Handling

import requestx

# Follow redirects (default)
response = requestx.get("https://httpbin.org/redirect/3")
print(f"Final URL: {response.url}")

# Disable redirects
response = requestx.get(
    "https://httpbin.org/redirect/1",
    follow_redirects=False
)
print(f"Status: {response.status_code}")  # 302
print(f"Location: {response.headers.get('location')}")

Response Inspection

import requestx

response = requestx.get("https://httpbin.org/get")

# Status information
print(f"Status Code: {response.status_code}")
print(f"Reason: {response.reason_phrase}")
print(f"Success: {response.is_success}")
print(f"Is Error: {response.is_error}")

# Headers
print(f"Content-Type: {response.headers.get('content-type')}")

# Content
print(f"Text: {response.text[:100]}...")
print(f"Bytes: {len(response.content)} bytes")

# JSON
data = response.json()
print(f"JSON keys: {list(data.keys())}")

# Timing
print(f"Elapsed: {response.elapsed:.3f} seconds")

Multiple Requests with Client

import requestx

with requestx.Client(
    base_url="https://jsonplaceholder.typicode.com",
    headers={"Accept": "application/json"}
) as client:
    # Fetch multiple resources
    users = client.get("/users").json()
    posts = client.get("/posts").json()
    comments = client.get("/comments").json()

    print(f"Users: {len(users)}")
    print(f"Posts: {len(posts)}")
    print(f"Comments: {len(comments)}")

    # Create a post
    new_post = client.post(
        "/posts",
        json={
            "title": "My Post",
            "body": "This is my post content",
            "userId": 1
        }
    ).json()
    print(f"Created post: {new_post['id']}")

    # Update a post
    updated = client.put(
        "/posts/1",
        json={
            "id": 1,
            "title": "Updated Title",
            "body": "Updated content",
            "userId": 1
        }
    ).json()
    print(f"Updated: {updated['title']}")

    # Delete a post
    response = client.delete("/posts/1")
    print(f"Deleted: {response.status_code}")