3个版本
0.1.2 | 2023年12月25日 |
---|---|
0.1.1 | 2023年12月25日 |
0.1.0 | 2023年12月25日 |
#9 in #response-body
13KB
305 行
Rust HTTP库
这个Rust库提供了处理HTTP请求和生成HTTP响应的基本功能。它由两个模块组成:用于解析传入HTTP请求的httprequest
模块和用于创建HTTP响应的httpresponse
模块。
安装
要在你的Rust项目中使用http-rust,请将以下行添加到你的Cargo.toml
文件中
http-rust = "0.1.0"
或者,你可以在项目目录中运行以下Cargo命令
cargo add http-rust
httprequest
模块
结构体
Resource
- 表示HTTP请求中的资源路径。
HttpRequest
- 表示传入的HTTP请求。
- 字段
method
: HTTP方法 (Get
、Post
或Uninitialized
)。version
: HTTP版本 (V1_1
、V2_0
或Uninitialized
)。resource
: 资源路径 (Path
)。headers
: 包含请求头的HashMap。msg_body
: 包含消息体的String。
方法
impl From<String> for HttpRequest
- 将原始HTTP请求字符串转换为
HttpRequest
结构体。
fn process_req_line(s: &str) -> (Method, Resource, Version)
- 处理请求行以提取方法、资源和版本。
fn process_req_header(s: &str) -> (String, String)
- 处理请求头行以提取键和值。
枚举
Method
- 表示HTTP方法 (
Get
、Post
或Uninitialized
)。
Version
- 表示HTTP版本 (
V1_1
、V2_0
或Uninitialized
)。
测试
- 在
tests
模块中提供了单元测试,以确保功能正常。
httpresponse
模块
结构体
HttpResponse<'a>
- 表示HTTP响应。
- 字段
version
: HTTP版本。status_code
: HTTP状态码。status_text
: HTTP状态文本。headers
: 包含响应头的可选HashMap。body
: 可选的响应体。
方法
fn new(status_code: &'a str, headers: Option<HashMap<&'a str, &'a str>>, body: Option<String>) -> HttpResponse<'a>
- 创建一个新的带有指定状态码、头部和主体的
HttpResponse
实例。
fn send_response(&self, write_stream: &mutimpl Write) -> Result<()>
- 将 HTTP 响应发送到提供的写入流。
从特质实现
impl<'a> From<HttpResponse<'a>> for String
- 将
HttpResponse
转换为格式化的 HTTP 响应字符串。
测试
- 在
tests
模块中提供了单元测试,以确保功能正常。
使用示例
use http_rust::httprequest::HttpRequest;
use http_rust::httpresponse::HttpResponse;
use std::collections::HashMap;
fn main() {
// Parse incoming HTTP request
let request_str = "GET /greeting HTTP/1.1\r\nHost: localhost:3000\r\nUser-Agent: curl/7.64.1\r\nAccept: */*\r\n\r\n";
let request: HttpRequest = request_str.into();
// Create an HTTP response
let headers = Some({
let mut h = HashMap::new();
h.insert("Content-Type", "text/html");
h
});
let body = Some("Hello, world!".to_string());
let response = HttpResponse::new("200", headers, body);
// Send the response
let mut write_stream = Vec::new();
response.send_response(&mut write_stream).unwrap();
let response_str = String::from_utf8(write_stream).unwrap();
println!("Received Request: {:?}", request);
println!("Generated Response: {}", response_str);
}
许可证
本项目受 MIT 许可证条款的许可。有关更多详细信息,请参阅 MIT 许可证。请参阅 LICENSE 文件。
请根据您的特定用例和需求自定义和扩展库。如果您有任何问题或遇到问题,请参阅提供的单元测试或寻求支持。