urllib3.future is as BoringSSL is to OpenSSL but to urllib3 (except support is available!)
✨🍰 Enjoy HTTP like its 2024 🍰✨
💰 Promotional offer, get everything and more for 40k 0$!
⚡ urllib3.future is a powerful, user-friendly HTTP client for Python.
⚡ urllib3.future goes beyond supported features while remaining compatible.
⚡ urllib3.future brings many critical features that are missing from both the Python standard libraries and urllib3:
- Async.
- Task safety.
- Thread safety.
- Happy Eyeballs.
- Connection pooling.
- Client-side SSL/TLS verification.
- Highly customizable DNS resolution.
- File uploads with multipart encoding.
- DNS over UDP, TLS, QUIC, or HTTPS. DNSSEC protected.
- Helpers for retrying requests and dealing with HTTP redirects.
- Support for gzip, deflate, brotli, and zstd encoding.
- Support for Python/PyPy 3.7+, no compromise.
- HTTP/1.1, HTTP/2 and HTTP/3 support.
- Proxy support for HTTP and SOCKS.
- Detailed connection inspection.
- Multiplexed connection.
- Mirrored Sync & Async.
- Amazingly Fast.
urllib3.future is powerful and easy to use:
>>> import urllib3
>>> pm = urllib3.PoolManager()
>>> resp = pm.request("GET", "https://httpbin.org/robots.txt")
>>> resp.status
200
>>> resp.data
b"User-agent: *\nDisallow: /deny\n"
>>> resp.version
20
or using asyncio!
import asyncio
import urllib3
async def main() -> None:
async with urllib3.AsyncPoolManager() as pm:
resp = await pm.request("GET", "https://httpbin.org/robots.txt")
print(resp.status) # 200
body = await resp.data
print(body) # # b"User-agent: *\nDisallow: /deny\n"
print(resp.version) # 20
asyncio.run(main())
urllib3.future can be installed with pip:
$ python -m pip install urllib3.future
You either do
import urllib3
Or...
import urllib3_future
Doing import urllib3_future
is the safest option for you as there is a significant number of projects that
require urllib3
.
- It's a fork
Support for bugs or improvements is served in this repository. We regularly sync this fork with the main branch of urllib3/urllib3 against bugfixes and security patches if applicable.
- OS Package Managers
Fellow OS package maintainers, you cannot just build and ship this package to your package registry.
As it override urllib3
and due to its current criticality, you'll have to set:
URLLIB3_NO_OVERRIDE=true python -m build
. Set URLLIB3_NO_OVERRIDE
variable with "true" in it.
It will prevent the override.
You should always install the downstream project prior to this fork.
e.g. I want requests
to be use this package.
python -m pip install requests
python -m pip install urllib3.future
Nowadays, we suggest using the package Niquests as a drop-in replacement for Requests. It leverages urllib3.future capabilities appropriately.
urllib3.future has usage and reference documentation at urllib3future.readthedocs.io.
urllib3.future happily accepts contributions.
To report a security vulnerability, please use the GitHub advisory disclosure form.
If your company benefits from this library, please consider sponsoring its development.