Skip to main content

An incredibly lightweight wrapper around urllib

Project description

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:

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

> 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

Packaging for release

rm dist/*
python3 -m build
python3 -m twine upload dist/*

License

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

thttp-1.3.0.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

thttp-1.3.0-py3-none-any.whl (7.1 kB view details)

Uploaded Python 3

File details

Details for the file thttp-1.3.0.tar.gz.

File metadata

  • Download URL: thttp-1.3.0.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for thttp-1.3.0.tar.gz
Algorithm Hash digest
SHA256 fceff289adc386121e275a35b3860759d2346b73e073fc64c3a3677c7f3d18a2
MD5 bc6ebfc4d30482d4201d9e5247067c62
BLAKE2b-256 a43481ab9f0e899144eb124eadb90aa3dd7940700f8f7cac22ba44e82d3b27cf

See more details on using hashes here.

File details

Details for the file thttp-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: thttp-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 7.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.12

File hashes

Hashes for thttp-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 36f18932385e840ffb18821598cd5e7d112a3f2a79f068f86cf9ddfc044e71ff
MD5 1cbc22a2fb6cc98fe93c2633797378c8
BLAKE2b-256 f4d984a069a01989d7462d0dff7d7dd69667197db5ba4497ba45011cb7800bac

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page