cs-rfc2616 20250306
Some convenience routines for working with HTTP 1.1 (RFC2616). See https://datatracker.ietf.org/doc/html/rfc2616
Keywords: python3

Some convenience routines for working with HTTP 1.1 (RFC2616).
See https://datatracker.ietf.org/doc/html/rfc2616

*Latest release 20250306*:
New default_headerregistry(), header(headers,name), content_length(headers) and content_type(headers).

## <a name="content_length"></a>`content_length(headers: Mapping[str, str]) -> Optional[int]`

Return the value of the `Content-Length` header, or `None`.

Note that `headers` is expected to be a case insensitive mapping.

## <a name="content_type"></a>`content_type(headers: Mapping[str, str]) -> email.headerregistry.ContentTypeHeader`

Return the parsed value of the `Content-Type` header, or `None`.

Note that `headers` is expected to be a case insensitive mapping.

## <a name="datetime_from_asctime_date"></a>`datetime_from_asctime_date(s)`

Parse an asctime-date from a string, return a datetime object.
See RFC2616 section 3.3.1.
Format: wkday, mon d hh:mm:ss yyyy

## <a name="datetime_from_http_date"></a>`datetime_from_http_date(s)`

Parse an HTTP-date from a string, return a datetime object.
See RFC2616 section 3.3.1.

## <a name="datetime_from_rfc1123_date"></a>`datetime_from_rfc1123_date(s)`

Parse an rfc1123-date from a string, return a datetime object.
See RFC2616 section 3.3.1.
Format: wkday, dd mon yyyy hh:mm:ss GMT

## <a name="datetime_from_rfc850_date"></a>`datetime_from_rfc850_date(s)`

Parse an rfc850-date from a string, return a datetime object.
See RFC2616 section 3.3.1.
Format: weekday, dd-mon-yy hh:mm:ss GMT

## <a name="enc8"></a>`enc8(s)`

encode and decode bytes<->str for HTTP stream: 8-bit 1-to-1

## <a name="get_lws"></a>`get_lws(s, offset=0)`

Gather up an LWS.

## <a name="get_quoted_string"></a>`get_quoted_string(s, offset=0)`

Match a quoted-string in `s` starting at `offset`.

## <a name="get_space"></a>`get_space(s, offset=0)`

Gather up a sequence of SP or HT, possibly empty.

## <a name="get_text"></a>`get_text(s, offset=0)`

Gather up a sequence of TEXT characters (possibly empty).

## <a name="get_token"></a>`get_token(s, offset=0)`

Get an RFC2616 token from the string `s` starting at `offset`.
Return token, new_offset.
See RFC2616 part 2.2.

## <a name="header"></a>`header(headers: Mapping[str, str], header_name: str, registry: Optional[email.headerregistry.HeaderRegistry] = None) -> Optional[email.headerregistry.BaseHeader]`

Return a header parsed into an instance of `email.headerregistry.BaseHeader`
or `None` if `header_name` is not present.

## <a name="message_has_body"></a>`message_has_body(headers)`

Does this message have a message body to forward?
See RFC2616, part 4.3 and 4.4.
Note that HTTP certain requests preempty this; for example HEAD never has a body.
That aspect is not considered here.

## <a name="parse_chunk_line1"></a>`parse_chunk_line1(bline)`

Parse the opening line of a chunked-encoding chunk.

## <a name="pass_chunked"></a>`pass_chunked(fpin, fpout, has_trailer)`

Copy "chunked" data from `fpin` to `fpout`, and an optional trailer section (default False).
See RFC2616, part 3.6.1.

## <a name="pass_length"></a>`pass_length(fpin, fpout, length)`

Copy a specific amount of data from `fpin` to `fpout`.

## <a name="read_chunked"></a>`read_chunked(fpin, has_trailer=False)`

Generator that reads "chunked" data from `fpin`, and an optional trailer section (default False).
See RFC2616, part 3.6.1.

## <a name="read_headers"></a>`read_headers(fp)`

Read headers from a binary file such as an HTTP stream, return the raw binary data and the corresponding Message object.

## <a name="read_http_request_line"></a>`read_http_request_line(fp)`

Read HTTP Request-Line from the binary file `fp`, return method, uri, version.
See RFC2616 section 5.1.
If an empty request line is received return None, None, None.

# Release Log



*Release 20250306*:
New default_headerregistry(), header(headers,name), content_length(headers) and content_type(headers).

*Release 20160828*:
Use "install_requires" instead of "requires" in DISTINFO.

*Release 20160827*:
Initial PyPI release.