Skip to main content

requests-hardened

Latest Version Supported Python Versions Supported Implementations

requests-hardened is a library that overrides the default behaviors of the requests library, and adds new security features.

Installation

The project is available on PyPI:

pip install requests-hardened

Features

  • SSRF Filters: blocks private and loopback IP ranges.

  • HTTP Redirects: can be used safely alongside the SSRF filter feature.

  • Proxy Support: proxies can be used in combination with SSRF Filters for a defense in depth.

  • Handy Overrides of Defaults: allows to enforce secure defaults globally, such as to mitigate DoS attacks.

Overrides of Defaults

This library allows to override some default values from the requests library that can have a security impact:

  • Config.never_redirect = False always reject HTTP redirects

  • Config.default_timeout = (2, 10) sets the default timeout value when no value or None is passed

  • Config.user_agent_override = None optional config to override User-Agent header. When set to None, requests library will set its default user-agent.

SSRF Filters

A SSRF IP filter can be used to reject HTTP(S) requests targeting private and loopback IP addresses.

Settings:

  • Config.ip_filter_enable whether or not to filter the IP addresses

  • ip_filter_allow_loopback_ips whether or not to allow loopback IP addresses

Proxy Support

The SSRF IP filter’s behavior with proxies are as follows:

  • Proxy’s IP Address: does not block private and loopback IP addresses (no filtering). Instead, the filter assumes that the proxy URL is never tainted with untrusted user input.

  • Target IP Address (Tunneled HTTP Requests): by default, the tunneled requests are filtered for potential SSRF attacks.

  • Protocols Supported: SOCKS4, SOCKS5, HTTP, and HTTPS proxy server protocols are supported.

Example Usage:

from requests_hardened import Config, Manager

http_manager = Manager(
    Config(
        default_timeout=(2, 10),
        never_redirect=False,
        # Enable SSRF IP filter
        ip_filter_enable=True,
        ip_filter_allow_loopback_ips=False,
    )
)

# List of proxies
proxies = {
  "https": "socks5://127.0.0.1:8888",
  "http": "socks5://127.0.0.1:8888",
}

# Sends the HTTP request using the proxy
resp = http_manager.send_request("GET", "https://example.com", proxies=proxies)
print(resp)

Full Example

from requests_hardened import Config, Manager

# Creates a global "manager" that can be used to create ``requests.Session``
# objects with hardening in place.
http_manager = Manager(
    Config(
        default_timeout=(2, 10),
        never_redirect=False,
        ip_filter_enable=True,
        ip_filter_allow_loopback_ips=False,
        user_agent_override=None
    )
)

# Sends an HTTP request without re-using ``requests.Session``:
resp = http_manager.send_request("GET", "https://example.com")
print(resp)

# Sends HTTP requests with reusable ``requests.Session``:
with http_manager.get_session() as sess:
    sess.request("GET", "https://example.com")
    sess.request("POST", "https://example.com", json={"foo": "bar"})

Release files for requests-hardened 1.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for requests-hardened 1.3.0
File Size Uploaded
requests_hardened-1.3.0.tar.gz 7.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for requests-hardened 1.3.0
File Interpreter ABI Platform
requests_hardened-1.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 16.7 kB

Release files / requests_hardened-1.3.0.tar.gz

Download URL requests_hardened-1.3.0.tar.gz
Size 7.5 kB
Tags Source
SHA-256 checksum
How to use checksums
9c1c7ade61354a175b24f4dd835997e4d2a9db8acf17b2f9ea2aca8b3643e0aa
BLAKE2b-256 checksum
How to use checksums
4f90196175b8223e82d148b1bf9808c6292a4013982f91f82434d27d2bead47f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.

Transparency log

Release files / requests_hardened-1.3.0-py3-none-any.whl

Download URL requests_hardened-1.3.0-py3-none-any.whl
Size 9.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8eb300a66c8b81fe7562dc2910f4a58c72d8445e2db9d66eb25cb5bca3e5572d
BLAKE2b-256 checksum
How to use checksums
a0694f4f89777a107141239dc352d33c5bcf2a397fee5683d5059b6a263c0fb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 14, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page