Parse and format HTTP dates, such as Last-Modified and If-Modified-Since headers.
Project description
httpdate
httpdate is a Python library for parsing and formatting HTTP date fields that are
used in headers like Last-Modified
and If-Modified-Since
. It does so in strict
accordance with RFC 9110 Section 5.6.7.
It has only one dependency, which is my tiny leapseconds library that just provides a tuple of official leap seconds.
HTTP date formats
All HTTP dates (eg, in Last-Modified
headers) must be sent in this format:
# IMF-fixdate
Sun, 06 Nov 1994 08:49:37 GMT
However, RFC 9110 states that recipients must also accept two other obsolete formats:
# rfc850-date
Sunday, 06-Nov-94 08:49:37 GMT
# asctime-date
Sun Nov 6 08:49:37 1994
RFC 9110 criteria for the HTTP date field includes the following:
- It must represent time as an instance of UTC.
- It must represent weekday names and month names in English.
- It is case-sensitive.
- It must not have any additional whitespace.
- It must be semantically correct (eg, the weekday must be the correct weekday).
- It can include leap seconds (eg,
23:59:60
). - It must represent a year of
1900
or above.
It isn't stated explicitly in the RFCs, but httpdate
will only consider a leap second
semantically correct if it's an official leap second.
Installation
pip install httpdate
Usage
from httpdate import is_valid_httpdate, httpdate_to_unixtime, unixtime_to_httpdate
# Check if an HTTP date (eg, `Last-Modified` header) is valid:
is_valid_httpdate("Sun, 06 Nov 1994 08:49:37 GMT")
try:
# Parse an HTTP date:
httpdate_to_unixtime("Sun, 06 Nov 1994 08:49:37 GMT")
# Parse an HTTP date (rfc850-date):
httpdate_to_unixtime("Sunday, 06-Nov-94 08:49:37 GMT")
# Parse an HTTP date (asctime-date):
httpdate_to_unixtime("Sun Nov 6 08:49:37 1994")
except ValueError:
# Not a valid HTTP date string.
pass
# Format a Unix timestamp as an HTTP date:
try:
unixtime_to_httpdate(784111777)
except ValueError:
# Outside the range supported by the operating system.
pass
is_valid_httpdate(httpdate)
:- Args
httpdate (str)
: An HTTP date string.
- Returns
bool
: True ifhttpdate
is a valid HTTP date string, otherwise False.
- Raises
TypeError
ifhttpdate
is not of typestr
.
- Args
httpdate_to_unixtime(httpdate)
:- Args
httpdate (str)
: An HTTP date string.
- Returns
int
: A Unix timestamp (int
).
- Raises
TypeError
ifhttpdate
is not of typestr
.ValueError
ifhttpdate
is not a valid HTTP date string.
- Args
unixtime_to_httpdate(unixtime)
:- Args
unixtime (int)
: A Unix timestamp.
- Returns
str
: An HTTP date string.
- Raises
TypeError
ifunixtime
is not of typeint
.ValueError
ifunixtime
represents a year before 1900, or if it is outside the range supported by the operating system.
- Args
Why Unix timestamps?
Unix timestamps are unambiguous, efficient, and can easily be converted to other date-time formats using only the standard library.
When a Last-Modified
header is semantically correct, this conversion — from string to
Unix timestamp and back to string — is lossless. (The only exception is leap seconds;
for example Sat, 31 Dec 2016 23:59:60 GMT
would be returned as Sun, 01 Jan 2017 00:00:00 GMT
. Recipients should interpret these as being identical anyway.)
If you want to store the original string instead, just use is_valid_httpdate()
to
validate before storing.
License
httpdate
is distributed under the terms of the MIT license.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file httpdate-1.2.0.tar.gz
.
File metadata
- Download URL: httpdate-1.2.0.tar.gz
- Upload date:
- Size: 10.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6193785e6f195c080a8c2aee1c74cbffb02000be4e69b22cc6e8171a5c5783f4 |
|
MD5 | bd8bb9a8f55fa68a3ea3192f7b30bf95 |
|
BLAKE2b-256 | 5d8bd7b18d45eeee13964c4bda9eb2dd7921fa9cd3ae4f9d1373eaff8b753dd0 |
File details
Details for the file httpdate-1.2.0-py3-none-any.whl
.
File metadata
- Download URL: httpdate-1.2.0-py3-none-any.whl
- Upload date:
- Size: 9.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.1 CPython/3.11.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d383a5345a32d8115ab0ff333e6522690b4ce7474efc81598dda91dd41713a0a |
|
MD5 | f813314bbcef6f6ce0857160906143a7 |
|
BLAKE2b-256 | e2b7bebe9e60e89b38b4f0b57e152e7bb69d0d4f1b84c190487f528d38e7f5e2 |