3个版本

0.1.2 2023年12月25日
0.1.1 2023年12月25日
0.1.0 2023年12月25日

#9 in #response-body

MIT 协议

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方法 (GetPostUninitialized)。
    • version: HTTP版本 (V1_1V2_0Uninitialized)。
    • 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方法 (GetPostUninitialized)。

Version

  • 表示HTTP版本 (V1_1V2_0Uninitialized)。

测试

  • 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 文件。

请根据您的特定用例和需求自定义和扩展库。如果您有任何问题或遇到问题,请参阅提供的单元测试或寻求支持。

无运行时依赖