https://github.com/sesh/thttp
A lightweight wrapper around urllib
https://github.com/sesh/thttp
http python urllib
Last synced: 10 months ago
JSON representation
A lightweight wrapper around urllib
- Host: GitHub
- URL: https://github.com/sesh/thttp
- Owner: sesh
- License: mit
- Created: 2019-11-20T19:39:26.000Z (about 6 years ago)
- Default Branch: main
- Last Pushed: 2023-08-09T01:23:05.000Z (over 2 years ago)
- Last Synced: 2025-04-06T23:25:22.857Z (10 months ago)
- Topics: http, python, urllib
- Language: Python
- Homepage:
- Size: 61.5 KB
- Stars: 20
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# thttp
`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._
## Installation
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
```
## Basic Usage
See the tests for examples of usage, but, effectively it's as simple as:
```python
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
```
## Running the tests
```sh
> python3 -m unittest thttp.py
```
And to check the coverage:
```sh
> coverage run -m unittest thttp.py
> coverage html && open htmlcov/index.html
```
Run `black` before committing any changes.
```sh
> black thttp.py
```
## Packaging for release
```
rm dist/*
python3 -m build
python3 -m twine upload dist/*
```
## License
This code is currently released under the [UNLICENSE](UNLICENSE.md) and considered public domain.
If more appropriate for your usage you may consider this project released under the [MIT License](LICENSE.md).