Skip to main content

DESCRIPTION

Project description

rfc-http-validate

This is a simple script to validate HTTP messages (possibly containing Structured Fields) in xml2rfcv3 documents and kramdown-rfc documents.

It checks that the content of an HTTP message:

  • Optionally, starts with a valid HTTP/1.1 request or status line
  • Has one or more HTTP/1.1 header field lines, possibly with line folding (so that long lines can be formatted within the constraints of the RFC format)
  • Optionally, has a response body, separated from the header fields with a single empty line

The start line will be checked that the method or status code is reasonable, and that the version identifier HTTP/1.1 is correct. The URL in requests will not be validated, however.

Header fields will be validated for general syntax. Additionally, header field names that are configured with structured type information (see below) will be validated according to that type.

The body, if present, is currently ignored (i.e., the Content-Length is not checked).

If an RFC8792 \\ wrapping header is present, lines will be unwrapped first (i.e., before unfolding, as per above). This is useful for long lines with binary content (which cannot contain whitespace); e.g.,

<sourcecode type="http-message">
# NOTE: '\' line wrapping per RFC 8792

Signature: sig1=:K2qGT5srn2OGbOIDzQ6kYT+ruaycnDAAUpKv+ePFfD0RAxn/1BUe\
    Zx/Kdrq32DrfakQ6bPsvB9aqZqognNT6be4olHROIkeV879RrsrObury8L9SCEibe\
    oHyqU/yCjphSmEdd7WD+zrchK57quskKwRefy2iEC5S2uAH0EPyOZKWlvbKmKu5q4\
    CaB8X/I5/+HLZLGvDiezqi6/7p2Gngf5hwZ0lSdy39vyNMaaAT0tKo6nuVw0S1MVg\
    1Q7MpWYZs0soHjttq0uLIA3DIbQfLiIvK6/l0BdWTU7+2uQj7lBkQAsFZHoA96ZZg\
    FquQrXRlmYOh+Hx5D9fJkXcXe5tmAg==:
</sourcecode>

Validating HTTP Messages in Markdown

In Markdown, all you need to do is adorn your messages with http-messsage; for example:

~~~ http-message
HTTP/1.1 200 OK
Foo: bar, baz
~~~

Then, run:

rfc-http-validate my-draft.md

Validating HTTP Messages in RFC XML

In XML, this script examines all sourcecode and artwork elements; when one has a type of http-message.

For example,

<sourcecode type="http-message">
Foo: bar; baz
Foo: one,
     two
</sourcecode>

Then, run:

rfc-http-validate my-draft.xml

Note that in your XML, there must not be any whitespace at the start of lines, unless they're continuation of previous lines (folding, as seen above).

Configuring Structured Type Information for Fields

By default, the types of existing Structured Fields (including those that are compatible with Structured Fields; see Retrofit Structured Fields for HTTP) are known. Type information for other fields can be added on the command line or through a file.

To pass a type on the command line, use the --list, --dictionary or --item arguments as appropriate, followed by the field name. For example:

rfc-http-validate --list Foo --list Bar --item Baz my_draft.xml

Here, Foo and Bar will be validated as Structured Lists, while Baz will be validated as a Structured Item.

Alternatively, you can collect this information in a JSON file, with the top-level object keys being field names, and their values being list, dict or item as appropriate. Thus, the configuration in the example above could be expressed in a JSON file sf.json as:

{
  "Foo": "list",
  "Bar": "list",
  "Baz": "item"
}

... and passed to the script like this:

rfc-http-validate --map sf.json my_draft.xml

Installation

The script requires Python 3, and can be installed with pip:

pip3 install rfc-http-validate

Use with I-D-Template

To automatically lint files with MT's I-D-Template:

  1. Add rfc-http-validate to requirements.txt (creating it if necessary)
  2. Add a sf.json file containing the field(s) your draft uses mapped to one of item, list, or dict
  3. Add the following to Makefile:
lint:: http-lint

rfc-http-validate ?= rfc-http-validate
.SECONDARY: $(drafts_xml)
.PHONY: http-lint
http-lint: $(addsuffix .http-lint.txt,$(addprefix .,$(drafts)))
.PHONY: .%.http-lint.txt
.%.http-lint.txt: %.xml $(DEPS_FILES)
	$(trace) $< -s http-lint $(rfc-http-validate) -q -m sf.json $<
	@touch $@

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

rfc-http-validate-0.3.4.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

rfc_http_validate-0.3.4-py3-none-any.whl (10.4 kB view details)

Uploaded Python 3

File details

Details for the file rfc-http-validate-0.3.4.tar.gz.

File metadata

  • Download URL: rfc-http-validate-0.3.4.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.7

File hashes

Hashes for rfc-http-validate-0.3.4.tar.gz
Algorithm Hash digest
SHA256 f36122429cfbc988ba8137539e0995b8806084de026dc41d82c458e7233e477f
MD5 468a265fb14bad497301580b015a55d2
BLAKE2b-256 a09aa979fff6516a04cb0f89a48d64b28dc67029ef0c69b656068bd1279a0cd3

See more details on using hashes here.

File details

Details for the file rfc_http_validate-0.3.4-py3-none-any.whl.

File metadata

File hashes

Hashes for rfc_http_validate-0.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 fe1f81f2d19bc44213f2119e7864284267b4f389cd9a7b7ecede589dd4e57202
MD5 d3b6e8ac0a4f57b02983af986a90aa55
BLAKE2b-256 ea308a89d04307dbb3d2d73d521f1b76c142a39344ca6f561e522fe8af1d830b

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