6 releases
0.2.2 | Oct 23, 2024 |
---|---|
0.2.1 | Oct 22, 2024 |
0.1.2 | Oct 21, 2024 |
#3 in #attacks
21KB
412 lines
Htpp
A fast and simple HTTP 1.1 parser written in Rust
Usage
To parse an HTTP request:
let req = b"GET /index.html HTTP/1.1\r\nAccept: */*\r\n\r\n";
let parsed = htpp::Request::parse(req).unwrap();
assert!(parsed.method() == htpp::Method::Get);
assert!(parsed.path() == "/index.html");
assert!(parsed.headers().len() == 1);
assert!(parsed.headers()[0].name == "Accept");
assert!(parsed.headers()[0].val == b"*/*");
To parse an HTTP response:
let res = b"HTTP/1.1 200 OK\r\nAccept: */*\r\n\r\n";
let parsed = htpp::Response::parse(res).unwrap();
assert!(parsed.status() == 200);
assert!(parsed.reason() == "OK");
assert!(parsed.headers().len() == 1);
assert!(parsed.headers()[0].name == "Accept");
assert!(parsed.headers()[0].val == b"*/*");
Contribution
Feel free to make a pull request if you think you can improve the code
lib.rs
:
htpp
A library for parsing HTTP requests and responses. The focus is on speed and safety. It is intentionally strict to prevent possible HTTP attacks
Working with [Request]
You can parse a request as follows:
use htpp::Request;
let req = b"GET /index.html HTTP/1.1\r\n\r\n";
let parsed = Request::parse(req).unwrap();
assert!(parsed.method() == htpp::Method::Get);
assert!(parsed.path() == "/index.html");
You can create a request as follows:
use htpp::{Method, Request, Header};
let method = Method::Get;
let path = "/index.html";
let headers = vec![Header::new("Accept", b"*/*")];
let req = Request::new(method, path, headers, b"");
Working with [Response]
You can parse a response as follows:
use htpp::Response;
let req = b"HTTP/1.1 200 OK\r\n\r\n";
let parsed = Response::parse(req).unwrap();
assert!(parsed.status() == 200);
assert!(parsed.reason() == "OK");
You can create a response as follows:
use htpp::{Response, Header};
let status = 200;
let reason = "OK";
let headers = vec![Header::new("Connection", b"keep-alive")];
let req = Response::new(status, reason, headers, b"");