#codec #chunked #transfer #encoder #decoder #rfc #coding

async_chunked_transfer

异步编码器和解码器,用于 HTTP 分块传输编码(RFC 7230 § 4.1)

1 个稳定版本

1.4.0 2021年6月26日

#2795解析器实现

24 每月下载量
用于 2 个包(通过 kvarn-extensions

Apache-2.0

25KB
462 代码行

async-chunked-transfer

注意:chunked_transfer 的唯一区别是,在丢弃编码器之前,您必须调用 Encoder::finish

文档

HTTP 分块传输编码的编码器和解码器。有关分块传输编码的更多信息

示例

解码

use async_chunked_transfer::Decoder;
use tokio::io::AsyncReadExt;

let encoded = b"3\r\nhel\r\nb\r\nlo world!!!\r\n0\r\n\r\n";
let mut decoded = String::new();

let mut decoder = Decoder::new(encoded as &[u8]);
decoder.read_to_string(&mut decoded).await;

assert_eq!(decoded, "hello world!!!");

编码

use chunked_transfer::Encoder;
use tokio::io::AsyncWriteExt;

let mut decoded = "hello world";
let mut encoded: Vec<u8> = vec![];

{
    let mut encoder = Encoder::with_chunks_size(&mut encoded, 5);
    encoder.write_all(decoded.as_bytes()).await;
    encoder.finish().await;
}

assert_eq!(encoded, b"5\r\nhello\r\n5\r\n worl\r\n1\r\nd\r\n0\r\n\r\n");

作者

依赖

~2.1–3MB
~49K SLoC