httplint
This Python library lints HTTP messages; it checks them for correctness and reports any issues it finds.
It performs all message-level checks for REDbot, but does not perform any 'active' checks by making requests to the network, and it does not have a Web user interface.
Using httplint as a Library
httplint exposes two classes for linting: HttpRequestLinter and HttpResponseLinter. They expose the following methods for telling the linter about the HTTP message:
- As appropriate:
process_request_topline, which takes threebytesarguments:method,uri, andversionprocess_response_topline, which takes threebytesarguments:version,status_code, andstatus_phrase
process_headersfor the headers, taking a list of (name,value) tuples (bothbytes)feed_contentfor the body (which can be called zero to many times), taking aninbytesargumentfinish_contentwhen done, which has two arguments; aboolindicating whether the response was complete, and an optional list of tuples for the trailers, in the same format thatprocess_headerstakes.
For example:
from httplint import HttpResponseLinter
linter = HttpResponseLinter()
linter.process_response_topline(b'HTTP/1.1', b'200', b'OK')
linter.process_headers([
(b'Content-Type', b'text/plain'),
(b'Content-Length', b'10'),
(b'Cache-Control', b'max-age=60')
])
linter.feed_content(b'12345')
linter.feed_content(b'67890')
linter.finish_content(True)
Using httplint from the Command Line
httplint can also be used from the command line. For example:
> curl -s -i --raw https://www.mnot.net/ | httplint -n
* The Content-Length header is correct.
* The resource last changed 8 days 6 hr ago.
* This response allows all caches to store it.
* The server's clock is correct.
* This response is fresh until 3 hr from now.
* This response may still be served by a cache once it becomes stale.
Interpreting Notes
Once a message has been linted, the results will appear on the notes property. This is a list of Note objects, each having the following attributes:
category- the Note's category; seenote.categorieslevel- seenote.levelssummary- a brief, one-line description of the notedetail- a longer explanation
Note that summary is textual, and needs to be escaped in a markup environment; detail, however, is already escaped HTML.
Continuing our example:
for note in linter.notes:
print(note.summary)
and the output should be:
The Content-Length header is correct.
This response allows all caches to store it.
This response doesn't have a Date header.
This response is fresh until 1 min from now.
This response may still be served by a cache once it becomes stale.
Field Descriptions
The description of any field can be found by calling get_field_description. For example:
>>> from httplint import get_field_description
>>> get_field_description("Allow")
'The `Allow` response header advertises the set of methods that are supported by the resource.'
If a description cannot be found it will return None.
Metadata
Release files for httplint 2024.4.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| httplint-2024.4.1.tar.gz | 70.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| httplint-2024.4.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 174.7 kB
Release files / httplint-2024.4.1.tar.gz
| Download URL | httplint-2024.4.1.tar.gz |
|---|---|
| Size | 70.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6e18db2c85af0e77b15ede922980ee8e7cc482ea60efec76f99725f7a5d5c782
|
|
BLAKE2b-256 checksum How to use checksums |
adb97870e155060f0c256ae700be5213bbcc880a27518030c055b09a4bf355d3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.0.0 CPython/3.12.2
|
Release files / httplint-2024.4.1-py3-none-any.whl
| Download URL | httplint-2024.4.1-py3-none-any.whl |
|---|---|
| Size | 104.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
afe7050a2ed65c8e443d6bcde272701969a88a59d0a3c2b216c885efecf62d41
|
|
BLAKE2b-256 checksum How to use checksums |
e5767d1b8136235a263b592a82d7f8af9e7e2c8d249bf92e6a17fdc4376c5be7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.0.0 CPython/3.12.2
|