#request-body #http-request #byte #body #request #http

uhttp_body_bytes

HTTP请求体字节的迭代器

3个版本

使用旧的Rust 2015

0.5.2 2017年2月1日
0.5.1 2017年1月30日
0.5.0 2017年1月30日

35#request-body

每月下载 21
用于 uhttp_json_api

MIT 许可证

10KB
117

uhttp_body_bytes -- HTTP请求体字节的迭代器

文档

此crate提供了一个迭代器,用于生成HTTP请求体中的字节。特别是,它为将数据直接从 TcpStream 读取到固定大小的缓冲区,并在第一次读取后,缓冲区包含请求头以及请求体的某些初始块的使用场景提供了便利。

此迭代器可以生成该部分块的字节,然后重用整个缓冲区来读取进一步的请求体块,并生成这些块的字节。结果可以输入到如 serde_json::from_iter 这样的基于字节的解析器中。

示例

use uhttp_body_bytes::BodyBytes;
use std::io::{Cursor, Read};

// Create a sample POST request with json payload.
let request = b"POST / HTTP/1.1\r\nHost: w3.org\r\n\r\n{\"k\": 42}";
let mut stream = Cursor::new(&request[..]);

// Simulate reading request-line/headers and partial body into a fixed-size buffer.
let mut buf = [0; 36];
let nbytes = stream.read(&mut buf[..]).unwrap();
assert_eq!(nbytes, 36);
assert_eq!(&buf[..], &b"POST / HTTP/1.1\r\nHost: w3.org\r\n\r\n{\"k"[..]);

// Process the headers (up to byte 33.)
// [...]
let body_start = 33;

// Start reading body after end of headers.
let mut bytes = BodyBytes::new(stream, &mut buf[..], body_start, nbytes);
assert_eq!(bytes.next().unwrap().unwrap(), b'{');
assert_eq!(bytes.next().unwrap().unwrap(), b'"');
assert_eq!(bytes.next().unwrap().unwrap(), b'k');
assert_eq!(bytes.next().unwrap().unwrap(), b'"');
assert_eq!(bytes.next().unwrap().unwrap(), b':');
assert_eq!(bytes.next().unwrap().unwrap(), b' ');
assert_eq!(bytes.next().unwrap().unwrap(), b'4');
assert_eq!(bytes.next().unwrap().unwrap(), b'2');
assert_eq!(bytes.next().unwrap().unwrap(), b'}');
assert!(bytes.next().is_none());

用法

crate 可以通过在 Cargo.toml 中添加它作为依赖项来使用

[dependencies]
uhttp_body_bytes = "0.5.2"

并在crate根目录中导入它

extern crate uhttp_body_bytes;

无运行时依赖