Skip to content

Repository files navigation

http_message

Parse partial/non spec compliant HTTP messages.

Partial HTTP Message

A PartialHttpRequest contains the potential spans for method, uri, http_version, headers, and body. The HTTP message does not need to be spec compliant so things like http_version are optional.

use http_message::{
error::Error,
models::{HttpRequest,PartialHttpRequest},
parse_partial_request,};fnmain(){let partial:PartialHttpRequest<'_> =
parse_partial_request("GET https://example.com\nx-key: 123").unwrap();assert_eq!(&Some(0..3), partial.method_span());assert_eq!(Some("GET"), partial.method_str());assert_eq!(&Some(4..23), partial.uri_span());assert_eq!(Some("https://example.com"), partial.uri_str());assert_eq!(&None, partial.http_version_span());assert_eq!(None, partial.http_version_str());assert_eq!(Some(&(24..34)), partial.header_span("x-key"));assert_eq!(Some("x-key: 123"), partial.header_str("x-key"));let request:Result<HttpRequest,Error> = partial.try_into();assert_eq!(Err(Error::missing_required("http_version")), request);}

Parsed HTTP Message

A ParsedHttpRequest contains the spans for method, uri, http_version, headers, and body. The HTTP message does need to be spec compliant so things like http_version are required.

use http_message::{
models::{HttpRequest,ParsedHttpRequest},
parse_request,};fnmain(){let parsed:ParsedHttpRequest<'_> =
parse_request("GET https://example.com HTTP/1.1\nx-key: 123\n\n").unwrap();assert_eq!(&(0..3), parsed.method_span());assert_eq!("GET", parsed.method_str());assert_eq!(&(4..23), parsed.uri_span());assert_eq!("https://example.com", parsed.uri_str());assert_eq!(&(24..32), parsed.http_version_span());assert_eq!("HTTP/1.1", parsed.http_version_str());assert_eq!(Some(&(33..44)), parsed.header_span("x-key"));assert_eq!(Some("x-key: 123\n"), parsed.header_str("x-key"));let request:HttpRequest = parsed.into();assert_eq!(HttpRequest{
uri:"https://example.com".into(),
method:"GET".into(),
http_version:"HTTP/1.1".into(),
headers: vec![("x-key","123").into()],
body:None},
request
);}

Verify

About

Parse partial/non spec compliant HTTP messages

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages