Skip to main content

An enhanced wrapper for the requests library with HTTP/2, HTTP/3, retry, timeout, and logging capabilities

Project description

Requests Enhanced

CI PyPI version Python Versions License

An enhanced wrapper for the popular requests library with additional features for improved reliability and convenience in Python HTTP requests.

Features

  • HTTP/2 Support: Performance improvements with HTTP/2 protocol support
  • HTTP/3 Support: Cutting-edge HTTP/3 protocol support for enhanced performance
  • Automatic Retries: Built-in retry mechanism with configurable backoff strategy
  • Timeout Handling: Enhanced timeout configuration and error handling
  • Improved Logging: Customizable logging with formatted output
  • Utility Functions: Simplified JSON request handling

Installation

# Basic installation from PyPI
pip install requests-enhanced

# With HTTP/2 support
pip install requests-enhanced[http2]

# With HTTP/3 support
pip install requests-enhanced[http3]

# From source (development)
git clone https://github.com/khollingworth/requests-enhanced.git
cd requests-enhanced
pip install -e ".[dev]"

Quick Start

from requests_enhanced import Session

# Create a session with default retry and timeout settings
session = Session()

# Simple GET request
response = session.get("https://api.example.com/resources")
print(response.json())

Documentation

HTTP/2 Support

The library provides robust HTTP/2 support with significant performance improvements:

Performance Benefits

  • 30-40% faster for multiple concurrent requests to the same host
  • Multiplexed connections: Multiple requests share a single connection
  • Header compression: Reduces overhead and improves load times
  • Binary framing: More efficient data transfer
  • Server push: Allows servers to preemptively send resources
  • Automatic fallback: Gracefully falls back to HTTP/1.1 when needed

Compatibility

  • Works with urllib3 versions 1.x and 2.x
  • Compatible with Python 3.7+
  • Requires TLS 1.2 or higher

See the HTTP/2 example for a performance comparison and the API Reference for configuration details.

Using HTTP/2

Enabling HTTP/2 is simple:

from requests_enhanced import Session, HTTP2_AVAILABLE

# Check if HTTP/2 support is available
if HTTP2_AVAILABLE:
    print("HTTP/2 support is enabled")
else:
    print("HTTP/2 dependencies not installed, install with: pip install requests-enhanced[http2]")

# Create a session with HTTP/2 support
session = Session(http_version="2")

# Make requests as usual - HTTP/2 will be used automatically for HTTPS connections
response = session.get("https://api.example.com/resources")

# HTTP/1.1 will still be used for HTTP connections or if server doesn't support HTTP/2

Manual Configuration

For advanced use cases, you can manually configure the HTTP/2 adapter:

from requests_enhanced import Session, HTTP2Adapter

session = Session()

# Mount HTTP/2 adapter for HTTPS URLs
http2_adapter = HTTP2Adapter()
session.mount("https://", http2_adapter)

# Keep standard adapter for HTTP URLs
from requests.adapters import HTTPAdapter
session.mount("http://", HTTPAdapter())

POST request with JSON data

data = {"name": "example", "value": 42}
response = session.post("https://api.example.com/resources", json=data)

Utility Functions

For quick, one-off requests:

from requests_enhanced.utils import json_get, json_post

# GET request that automatically returns JSON
data = json_get("https://api.example.com/resources")

# POST request with automatic JSON handling
result = json_post("https://api.example.com/resources", data={"name": "example"})

Error Handling

from requests_enhanced import Session
from requests_enhanced.exceptions import RequestTimeoutError, RequestRetryError

try:
    session = Session()
    response = session.get("https://api.example.com/resources")
except RequestTimeoutError as e:
    print(f"Request timed out: {e}")
    print(f"Original exception: {e.original_exception}")
except RequestRetryError as e:
    print(f"Retry failed: {e}")

Documentation

Detailed documentation is available in the docs directory:

Development

Setup Development Environment

# Clone the repository
git clone https://github.com/khollingworth/requests-enhanced.git
cd requests-enhanced

# Create a virtual environment (recommended)
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -e ".[dev]"

Running Tests

# Run all tests
pytest

# Run with coverage report
pytest --cov=src/requests_enhanced --cov-report=term-missing

# Run specific test file
pytest tests/test_sessions.py

Code Style

This project uses black for code formatting and flake8 for linting:

# Format code
black src tests examples

# Check code style
flake8 src tests examples

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

requests_enhanced-0.1.18.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

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

requests_enhanced-0.1.18-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file requests_enhanced-0.1.18.tar.gz.

File metadata

  • Download URL: requests_enhanced-0.1.18.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for requests_enhanced-0.1.18.tar.gz
Algorithm Hash digest
SHA256 c0c5a39645675297403fbe883c317b186d518e3c1b6afd8896767ba2051c5378
MD5 27b096b62c99d097612812a88e4eb350
BLAKE2b-256 6c67713b370c93dc9c99e987fdbd7312a2d5062f2d3ce961ba16e30ee51265bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for requests_enhanced-0.1.18.tar.gz:

Publisher: ci.yml on khollingworth/requests-enhanced

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file requests_enhanced-0.1.18-py3-none-any.whl.

File metadata

File hashes

Hashes for requests_enhanced-0.1.18-py3-none-any.whl
Algorithm Hash digest
SHA256 f14e3526053aca260b7d64fc0b9534225a5680b7b33ed6e46d6632ac824836bc
MD5 6bed35468d230d0a1c04ba64f9c5dba8
BLAKE2b-256 4eb5bfe842ca3547807154de8fbb5cd67a4f939ff98269bfd0ac7187b392fe03

See more details on using hashes here.

Provenance

The following attestation bundles were made for requests_enhanced-0.1.18-py3-none-any.whl:

Publisher: ci.yml on khollingworth/requests-enhanced

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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