GithubHelp home page GithubHelp logo

valeriytisch / niquests Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jawah/niquests

0.0 0.0 0.0 12.64 MB

Requests but with HTTP/3, HTTP/2, Multiplexed Connections, System CAs, Certificate Revocation, DNS over HTTPS / TLS / QUIC or UDP, Async, DNSSEC, and (much) pain removed!

Home Page: https://niquests.readthedocs.io/en/latest/

License: Apache License 2.0

Python 99.94% Makefile 0.06%

niquests's Introduction

Niquests Logo

Niquests is a simple, yet elegant, HTTP library. It is a drop-in replacement for Requests, which is under feature freeze.

Niquests, is the “Safest, Fastest1, Easiest, and Most 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 comparison against requests, httpx and aiohttp!
Feature niquests requests httpx aiohttp
HTTP/1.1
HTTP/2 2
HTTP/3 over QUIC
Synchronous
Asynchronous
Thread Safe 3 N/A4
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
📈 Look at the performance comparison against them!

Scenario: Fetch a thousand requests using 10 tasks or threads, each with a hundred requests using a single pool of connection.

High-Level APIs

Client Average Delay to Complete Notes
requests 987 ms ThreadPoolExecutor. HTTP/1.1
httpx 735 ms Asyncio. HTTP/2
niquests 470 ms Asyncio. HTTP/2

Simplified APIs

Client Average Delay to Complete Notes
requests core 643 ms ThreadPoolExecutor. HTTP/1.1
httpx core 550 ms Asyncio. HTTP/2
aiohttp 220 ms Asyncio. HTTP/1.1
niquests core 210 ms Asyncio. HTTP/2

Did you give up on HTTP/2 due to performance concerns? Think again! Multiplexing and response lazyness open up a wide range of possibilities! Want to learn more about the tests? scripts? reasoning?

Take a deeper look at https://github.com/Ousret/niquests-stats

⚠️ Do the responsible thing with this library and do not attempt DoS remote servers using its abilities.

>>> import niquests
>>> s = niquests.Session(resolver="doh+google://", multiplexed=True)
>>> r = s.get('https://pie.dev/basic-auth/user/pass', auth=('user', 'pass'))
>>> r.status_code
200
>>> 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
<Response HTTP/3 [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:
    async with niquests.AsyncSession(resolver="doh+google://") as s:
        r = await s.get('https://pie.dev/basic-auth/user/pass', auth=('user', 'pass'), stream=True)
        print(r)  # Output: <Response HTTP/3 [200]>
        payload = await r.json()
        print(payload)  # Output: {'authenticated': True, ...}

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!

Downloads Supported Versions

✨ Installing Niquests and Supported Versions

Niquests is available on PyPI:

$ python -m pip install niquests

Niquests officially supports Python or PyPy 3.7+.

🚀 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
  • 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
  • Object-oriented headers
  • Multi-part File Uploads
  • Chunked HTTP Requests
  • Fully type-annotated!
  • SOCKS Proxy Support
  • Connection Timeouts
  • Streaming Downloads
  • HTTP/2 by default
  • HTTP/3 over QUIC
  • Happy Eyeballs
  • Multiplexed!
  • Thread-safe!
  • DNSSEC!
  • Async!

Need something more? Create an issue, we 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.

Footnotes

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

  2. 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.

  3. httpx officially claim to be thread safe but recent tests demonstrate otherwise as of february 2024. https://github.com/jawah/niquests/issues/83#issuecomment-1956065258 https://github.com/encode/httpx/issues/3072 https://github.com/encode/httpx/issues/3002

  4. aiohttp has no support for synchronous request.

  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

niquests's People

Contributors

kennethreitz avatar lukasa avatar sigmavirus24 avatar nateprewitt avatar ousret avatar slingamn avatar brauliovm avatar dpursehouse avatar jgorset avatar daftshady avatar jerem avatar gazpachoking avatar idan avatar schlamar avatar jdufresne avatar kevinburke avatar kmadac avatar aless10 avatar sethmlarson avatar graingert avatar mjpieters avatar jasongrout avatar davidfischer avatar klimenko avatar mgiuca avatar dependabot[bot] avatar hugovk avatar demetriosbairaktaris avatar t-8ch avatar monkeython avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.