Skip to main content
Niquests Logo

Niquests is a simple, yet elegant, HTTP library. It is a drop-in replacement for Requests, which is under feature freeze. ✨ Were you used to betamax, requests-mock, responses, ...? See how they still work! We got you covered.

Niquests, is the “Safest, Fastest1, Easiest, and Most advanced” Python HTTP Client. Production Ready!

Live Benchmark

Target: https://httpbingo.org/get
Conditions: All default parameters, one shared session, everything simultaneously.
HTTP/2 when supported.
Niquests Benchmark
👆 Look at the feature table comparison against requests, httpx and aiohttp!
Feature niquests requests httpx aiohttp
HTTP/1.1
HTTP/2 2
HTTP/3 over QUIC
Synchronous N/A3
Asynchronous
Thread Safe 4 N/A3
Task Safe N/A5
OS Trust Store
Multiplexing Limited6
DNSSEC 7
Customizable DNS Resolution
DNS over HTTPS
DNS over QUIC
DNS over TLS
Multiple DNS Resolver
Network Fine Tuning & Inspect Limited8 Limited8
Certificate Revocation Protection
Session Persistence
In-memory Certificate CA & mTLS Limited9 Limited9
SOCKS 4/5 Proxies
HTTP/HTTPS Proxies
TLS-in-TLS Support
Direct HTTP/3 Negotiation 10 N/A11 N/A11 N/A11
Happy Eyeballs
Package / SLSA Signed
HTTP/2 with prior knowledge (h2c)
Post-Quantum Security & ECH 12
HTTP Trailers
Early Responses
WebSocket over HTTP/1 13 13
WebSocket over HTTP/2 and HTTP/3 14
Automatic Ping for HTTP/2+ N/A N/A
Automatic Connection Upgrade / Downgrade N/A N/A
Server Side Event (SSE)
WASM / Pyodide
WASM / WASI
Swappable TLS Backend
Browser TLS Impersonation 15
📈 Look at the performance comparison against them!

Given the script hosted at https://gist.github.com/Ousret/9e99b07e66eec48ccea5811775ec116d that simply send 1000 requests. We deliberately use a real remote endpoint, disabled Niquests manual multiplexing (for fairness), to showcase how the client behave in a real life usage.

GET https://httpbingo.org/get

Client Average Delay to Complete Notes
httpx 2.087s HTTP/2
aiohttp 1.351s HTTP/1.1
niquests 0.551s HTTP/2

:tada: Niquests can easily bring you twice the throughput if you migrated today. Join us today!

>>> import niquests
>>> r = niquests.get('https://one.one.one.one')
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf-8'
>>> r.oheaders.content_type.charset
'utf-8'
>>> r.encoding
'utf-8'
>>> r.text
'{"authenticated": true, ...'
>>> r.json()
{'authenticated': True, ...}
>>> r
<Response HTTP/2 [200]>
>>> r.ocsp_verified
True
>>> r.conn_info.established_latency
datetime.timedelta(microseconds=38)

or using async/await!

import niquests
import asyncio

async def main() -> None:
    r = await niquests.aget('https://one.one.one.one', stream=True)
    print(r)  # Output: <Response HTTP/2 [200]>
    payload = await r.text  # we await text because we set `stream=True`!
    print(payload)  # Output: <html>...
    # or... without stream=True
    r = await niquests.aget('https://one.one.one.one')
    print(r)  # Output: <Response HTTP/3 [200]>
    payload = r.text  # we don't need to away anything, it's already loaded!
    print(payload)  # Output: <html>...

asyncio.run(main())

Niquests allows you to send HTTP requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your PUT & POST data — just use the json method!

PyPI Downloads Supported Versions OpenSSF Best Practices

This project does not require any compilation toolchain. The HTTP/3 support is not enforced and installed if your platform can support it natively (e.g. pre-built wheel available).

✨ Installing Niquests and Supported Versions

Niquests is available on PyPI:

$ python -m pip install niquests

Niquests officially supports Python or PyPy 3.7+. Even WASI or Pyodide!

🚀 Supported Features & Best–Practices

Niquests is ready for the demands of building scalable, robust and reliable HTTP–speaking applications.

  • DNS over HTTPS, DNS over QUIC, DNS over TLS, and DNS over UDP
  • Automatic Content Decompression and Decoding
  • OS truststore by default, no more certifi!
  • OCSP Certificate Revocation Verification
  • Advanced connection timings inspection
  • In-memory certificates (CAs, and mTLS)
  • Browser-style TLS/SSL Verification
  • Certificate Revocation List (CRL)
  • Sessions with Cookie Persistence
  • Keep-Alive & Connection Pooling
  • International Domains and URLs
  • Automatic honoring of .netrc
  • Basic & Digest Authentication
  • Familiar dict–like Cookies
  • Network settings fine-tuning
  • HTTP/2 with prior knowledge
  • Browser TLS Impersonator
  • Object-oriented headers
  • Multi-part File Uploads
  • Swappable TLS Backend
  • Post-Quantum Security
  • Chunked HTTP Requests
  • Fully type-annotated!
  • Run in the Browser!
  • SOCKS Proxy Support
  • Connection Timeouts
  • Streaming Downloads
  • HTTP/2 by default
  • HTTP/3 over QUIC
  • Early Responses
  • Happy Eyeballs
  • Multiplexed!
  • Thread-safe!
  • WebSocket!
  • Trailers!
  • DNSSEC!
  • Async!
  • WASI!
  • SSE!
  • ECH!

Need something more? Create an issue, we actively listen.

📝 Why did we pursue this?

For many years now, Requests has been frozen. Being left in a vegetative state and not evolving, this blocked millions of developers from using more advanced features.

We don't have to reinvent the wheel all over again, HTTP client Requests is well established and really pleasant in its usage. We believe that Requests has the most inclusive and developer friendly interfaces. We intend to keep it that way. As long as we can, long live Niquests!

How about a nice refresher with a mere CTRL+H import requests to import niquests as requests ?

💼 For Enterprise

Professional support for Niquests is available as part of the Tidelift Subscription. Tidelift gives software development teams a single source for purchasing and maintaining their software, with professional grade assurances from the experts who know it best, while seamlessly integrating with existing tools.

You may also be interested in unlocking specific advantages (like access to a private issue tracker) by looking at our GitHub sponsor tiers.


Niquests is a highly improved HTTP client that is based (forked) on Requests. The previous project original author is Kenneth Reitz and actually left the maintenance of Requests years ago.

  1. performance measured when leveraging a multiplexed connection with or without uses of any form of concurrency as of March 2026. The research compared httpx, requests, aiohttp against niquests. See https://gist.github.com/Ousret/9e99b07e66eec48ccea5811775ec116d

  2. while advertised as possible, they refuse to make it the default due to performance and stability issues. as of December 2025 an extra is required to enable it manually.

  3. aiohttp was conceived solely for an asynchronous context. 2

  4. httpx officially claim to be thread safe but recent tests demonstrate otherwise as of March 2026. https://github.com/jawah/niquests/issues/83#issuecomment-1956065258 https://github.com/encode/httpx/issues/3072 https://github.com/encode/httpx/issues/3002 and only recently acknowledged the issue in https://github.com/encode/httpx/issues/3324 (one year after getting valid reports).

  5. requests has no support for asynchronous request.

  6. while the HTTP/2 connection object can handle concurrent requests, you cannot leverage its true potential.

  7. enabled when using a custom DNS resolver.

  8. they do not expose anything to control network aspects such as IPv4/IPv6 toggles, and timings (e.g. DNS response time, established delay, TLS handshake delay, etc...) and such. 2

  9. loading client certificate without file can't be done. 2

  10. you must use a custom DNS resolver so that it can preemptively connect using HTTP/3 over QUIC when remote is compatible.

  11. they don't support HTTP/3 at all. 2 3

  12. depends on your Python runtime. ECH and PQ support through HTTP/3 over QUIC requires qh3 installed. HTTP/1, and HTTP/2 can benefit from PQ and ECH, provided the rtls extra is installed. ECH requires you to use a custom resolver (e.g. DNS-over-HTTPS).

  13. they don't offer any built-in to speak with a WebSocket server. 2

  14. most servers out there are not ready for this feature, but Niquests is already compliant and future-proof! Caddy server and HAProxy support this!

  15. requires you to install Niquests with the utls extra. Everything else is automatic!

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

niquests-3.21.1.tar.gz (1.1 MB view details)

Uploaded Source

Built Distribution

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

niquests-3.21.1-py3-none-any.whl (230.4 kB view details)

Uploaded Python 3

File details

Details for the file niquests-3.21.1.tar.gz.

File metadata

  • Download URL: niquests-3.21.1.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for niquests-3.21.1.tar.gz
Algorithm Hash digest
SHA256 8ba6ee8712570ae41dfc59ac2ac7e509dcde660c6cc47078b43be423a2f99e64
MD5 b72ed92e3c14442b745cfc22fb193fda
BLAKE2b-256 21e0bf0dfc98ff4fd6dc1f4872972c14688f159013ebecda27c71ccb42bfdff4

See more details on using hashes here.

Provenance

The following attestation bundles were made for niquests-3.21.1.tar.gz:

Publisher: publish.yml on jawah/niquests

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

File details

Details for the file niquests-3.21.1-py3-none-any.whl.

File metadata

  • Download URL: niquests-3.21.1-py3-none-any.whl
  • Upload date:
  • Size: 230.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for niquests-3.21.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ac1ff8061cb480cdaad07f08b95cf21ee0a68ef21fbc2b6ddf5afff8e0d0072e
MD5 3909e800aa9ce4ddf02a67e631208ffa
BLAKE2b-256 befefca859af3c83c718d8228c918716b6b32dcda96ee94980cb9849a415e1c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for niquests-3.21.1-py3-none-any.whl:

Publisher: publish.yml on jawah/niquests

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

Release history Release notifications | RSS feed

This release

3.21.1 This release

2 files

3.21.0

2 files

3.20.1

2 files

3.20.0

2 files

3.19.1

2 files

3.19.0

2 files

3.18.8

2 files

3.18.7

2 files

3.18.6

2 files

3.18.5

2 files

3.18.4

2 files

3.18.3

2 files

3.18.2

2 files

3.18.1

2 files

3.18.0

2 files

3.17.0

2 files

3.16.1

2 files

3.16.0

2 files

3.15.2

2 files

3.15.1

2 files

3.15.0

2 files

3.14.1

2 files

3.14.0

2 files

3.13.1

2 files

3.13.0

2 files

3.12.3

2 files

3.12.2

2 files

3.12.1

2 files

3.12.0

2 files

3.11.4

2 files

3.11.3

2 files

3.11.2

2 files

3.11.1

2 files

3.11.0

2 files

3.10.3

2 files

3.10.2

2 files

3.10.1

2 files

3.10.0

2 files

3.9.1

2 files

3.9.0

2 files

3.8.0

2 files

3.7.2

2 files

3.7.1

2 files

3.7.0

2 files

3.6.7

2 files

3.6.6

2 files

3.6.5

2 files

3.6.4

2 files

3.6.3

2 files

3.6.2

2 files

3.6.1

2 files

3.6.0

2 files

3.5.5

2 files

3.5.4

2 files

3.5.3

2 files

3.5.2

2 files

3.5.1

2 files

3.5.0

2 files

3.4.7

2 files

3.4.6

2 files

3.4.5

2 files

3.4.4

2 files

3.4.3

2 files

3.4.2

2 files

3.4.1

2 files

3.4.0

2 files

3.3.4

2 files

3.3.3

2 files

3.3.2

2 files

3.3.1

2 files

3.3.0

2 files

3.2.4

2 files

3.2.3

2 files

3.2.2

2 files

3.2.1

2 files

3.2.0

2 files

3.1.4

2 files

3.1.3

2 files

3.1.2

2 files

3.1.1

2 files

3.1.0

2 files

3.0.2

2 files

3.0.1

2 files

3.0.0

2 files

2.32.1

2 files

2.32.0

2 files

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