thttp
is a single file, lightweight, well-tested wrapper around urllib
that's intended to be copied directly into your project.
It's features include:
- Making GET, POST, PATCH, PUT, HEAD and OPTIONS requests
- Sending query parameters with your request
- Encoding JSON payloads for POST, PATCH and PUT requests
- Encoding form-encoded payloads for POST, PATCH and PUT request
- Sending custom headers with any request
- Disabling SSL certificate verification for local testing / corporate proxies
- Following (or not following) redirects
- Sending through a CookieJar object that can be reused between requests
- Authenticating with HTTP basic auth
- Specifying a custom timeout for your request
- Decompressing gzipped content in the response
- Loading JSON from the response
- Returning error responses instead of throwing exceptions from
urllib
pretty()
function for printing responses- Ability to upload files using the
{"file": open("file.png", "rb")}
style
Future features:
- Better detection of JSON responses
- Improve handling of non-utf-8 requests
- Improve handling of non-utf-8 responses
Note: this project is not intended to solve all use cases that can be achieved with urllib, requests, httpx, or other HTTP libraries. The intent is to provide a lightweight tool that simplifies some of the most common use cases for developers.
copy thttp.py
directly into your project:
curl https://raw.githubusercontent.com/sesh/thttp/main/thttp.py > thttp.py
Or, install with pip
:
python3 -m pip install thttp
See the tests for examples of usage, but, effectively it's as simple as:
from thttp import request
response = request("https://httpbingo.org/get", params={"data": "empty"})
response.json
# {'args': {'data': ['empty']}, 'headers': {'Accept-Encoding': ['identity'], 'Fly-Client-Ip': ['45.76.105.111'], 'Fly-Forwarded-Port': ['443'], 'Fly-Forwarded-Proto': ['https'], 'Fly-Forwarded-Ssl': ['on'], 'Fly-Region': ['hkg'], 'Fly-Request-Id': ['01F6P2WQAY1NGPRDCXV9H60XW5'], 'Host': ['httpbingo.org'], 'User-Agent': ['Python-urllib/3.8'], 'Via': ['1.1 fly.io'], 'X-Forwarded-For': ['45.76.105.111, 77.83.142.42'], 'X-Forwarded-Port': ['443'], 'X-Forwarded-Proto': ['https'], 'X-Forwarded-Ssl': ['on'], 'X-Request-Start': ['t=1622091390302198']}, 'origin': '45.76.105.111, 77.83.142.42', 'url': 'https://httpbingo.org/get?data=empty'}
response.status
# 200
> python3 -m unittest thttp.py
And to check the coverage:
> coverage run -m unittest thttp.py
> coverage html && open htmlcov/index.html
Run black
before committing any changes.
> black thttp.py
rm dist/*
python3 -m build
python3 -m twine upload dist/*
This code is currently released under the UNLICENSE and considered public domain. If more appropriate for your usage you may consider this project released under the MIT License.