Package: niquests
Niquestsis a simple, yet elegant, HTTP library. It is a drop-in replacement forRequests, which is under feature freeze.Niquests, is the “Safest,Fastest[^10],Easiest, andMost advanced” Python HTTP Client. Production Ready!✔️Try before you switch:See Multiplexed in Action📖See why you should switch:Read about 10 reasons why👆Look at the feature table comparisonagainstrequests, httpx and aiohttp!FeatureniquestsrequestshttpxaiohttpHTTP/1.1✅✅✅✅HTTP/2✅❌✅[^7]❌HTTP/3 over QUIC✅❌❌❌Synchronous✅✅✅❌Asynchronous✅❌✅✅Thread Safe✅✅❌[^5]N/A[^1]Task Safe✅N/A[^2]✅✅OS Trust Store✅❌❌❌Multiplexing✅❌Limited[^3]❌DNSSEC✅[^11]❌❌❌Customizable DNS Resolution✅❌❌✅DNS over HTTPS✅❌❌❌DNS over QUIC✅❌❌❌DNS over TLS✅❌❌❌Network Fine Tuning & Inspect✅❌Limited[^6]Limited[^6]Certificate Revocation Protection✅❌❌❌Session Persistence✅✅✅✅In-memory Certificate CA & mTLS✅❌Limited[^4]Limited[^4]SOCKS 4/5 Proxies✅✅✅❌HTTP/HTTPS Proxies✅✅✅✅TLS-in-TLS Support✅✅✅✅Direct HTTP/3 Negocation✅[^9]N/A[^8]N/A[^8]N/A[^8]Package / SLSA Signed✅❌❌✅[^1]: aiohttp has no support for synchronous request.
[^2]: requests has no support for asynchronous request.
[^3]: while the HTTP/2 connection object can handle concurrent requests, you cannot leverage its true potential.
[^4]: loading client certificate without file can't be done.
[^5]: httpx officially claim to be thread safe but recent tests demonstrate otherwise as of february 2024.
[^6]: 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.
[^7]: while advertised as possible, they refuse to make it the default due to performance issues. as of february 2024 an extra is required to enable it manually.
[^8]: they don't support HTTP/3 at all.
[^9]: you must use a custom DNS resolver so that it can preemptively connect using HTTP/3 over QUIC when remote is compatible.
[^10]: performance measured when leveraging a multiplexed connection with or without uses of any form of concurrency as of november 2023. The research comparedhttpx,requests,aiohttpagainstniquests.
[^11]: enabled when using a custom DNS resolver.>>>importniquests>>>s=niquests.Session(resolver="doh+google://",multiplexed=True)>>>r=s.get('https://pie.dev/basic-auth/user/pass',auth=('user','pass'))>>>r.status_code200>>>r.headers['content-type']'application/json; charset=utf8'>>>r.oheaders.content_type.charset'utf8'>>>r.encoding'utf-8'>>>r.text'{"authenticated": true, ...'>>>r.json(){'authenticated':True,...}>>>r<ResponseHTTP/3[200]>>>>r.ocsp_verifiedTrue>>>r.conn_info.established_latencydatetime.timedelta(microseconds=38)or using async/await! you'll need to enclose the code within proper async function, see the docs for more.importniquests>>>s=niquests.AsyncSession(resolver="doh+google://")>>>r=awaits.get('https://pie.dev/basic-auth/user/pass',auth=('user','pass'),stream=True)>>>r<ResponseHTTP/3[200]>>>>awaitr.json(){'authenticated':True,...}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 yourPUT&POSTdata — just use thejsonmethod!✨ Installing Niquests and Supported VersionsNiquests is available on PyPI:$python-mpipinstallniquestsNiquests officially supports Python or PyPy 3.7+.🚀 Supported Features & Best–PracticesNiquests 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 UDPAutomatic Content Decompression and DecodingOS truststore by default, no more certifi!OCSP Certificate Revocation VerificationAdvanced connection timings inspectionIn-memory certificates (CAs, and mTLS)Browser-style TLS/SSL VerificationSessions with Cookie PersistenceKeep-Alive & Connection PoolingInternational Domains and URLsAutomatic honoring of.netrcBasic & Digest AuthenticationFamiliardict–like CookiesNetwork settings fine-tuningObject-oriented headersMulti-part File UploadsChunked HTTP RequestsFully type-annotated!SOCKS Proxy SupportConnection TimeoutsStreaming DownloadsHTTP/2 by defaultHTTP/3 over QUICMultiplexed!Thread-safe!DNSSEC!Async!Need something more? Create an issue, we listen.📝 Why did we pursue this?For many years now,Requestshas 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 clientRequestsis well established and
really pleasant in its usage. We believe thatRequestshas 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 mereCTRL+Himport requeststoimport niquests as requests?💼 For EnterpriseProfessional support for Niquests is available as part of theTidelift
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 by looking at ourGitHub 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.