Python Forum
HTTP Client 2/3, multiplexed connection, advanced security, DNS-over-QUIC, etc.. - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: General (https://python-forum.io/forum-1.html)
+--- Forum: News and Discussions (https://python-forum.io/forum-31.html)
+--- Thread: HTTP Client 2/3, multiplexed connection, advanced security, DNS-over-QUIC, etc.. (/thread-41381.html)



HTTP Client 2/3, multiplexed connection, advanced security, DNS-over-QUIC, etc.. - Ousret - Jan-06-2024

Hello,

I am proposing the community to discover a HTTP client that ideally is a drop-in replacement of the popular Requests.
Also opening that discussions to listen at what you would expect / need from such a client nowadays.

It is the only client to truly leverage HTTP/2 and 3 capabilities. And you can migrate your actual code base without effort.

Source: https://github.com/jawah/niquests

Here a partial extract of its features:
  • 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
  • Multiplexed!
  • Thread-safe!
  • DNSSEC!
  • Async!

>>> 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)
This project has potential, so I like to think.
I am asking to the community to interact with this project to increase its visibility if you will. It would be appreciated.

Then, the open subject is: "What are the pains you encounter? How would do have them resolved?"

Regards,