rocket 获取 http header 为 HashMap

创建日期: 2024-01-29 19:32 | 作者: 风波 | 浏览次数: 15 | 分类: Rust

Cargo.tpml

[dependencies]
rocket = "0.5.0"
serde_json = "1.0.48"

主要代码

use rocket::request::FromRequest;
use std::collections::HashMap;
use serde_json::json;
use rocket::http::Status;
use rocket::request::{self, Request, Outcome};
use std::convert::{Infallible};

struct Headers {
    mp: HashMap<String, String>,
}

#[rocket::async_trait]
impl<'r> FromRequest<'r> for Headers {
    type Error = Infallible;

    async fn from_request(req: &'r Request<'_>) -> request::Outcome<Self, Infallible> {
        let mut mp = HashMap::new();
        let header_map = req.headers();
        for header in header_map.iter() {
            mp.insert(header.name().to_string(), header.value().to_string());
        }
        let m = Headers{mp: mp};
        Outcome::Success(m)
    }
}

#[get("/headers")]
fn headers(hs: Headers) -> String {
    let mut js = json!({});
    for (k, v) in hs.mp {
        js[k] = json!(v);
    }

    return js.to_string();
}

#[launch]
fn rocket() -> _ {
    rocket::build()
        .mount("/", routes![headers])
}

当请求 url /headers 的时候,会把客户端上传的 header 作为 json 传回给客户端

15 浏览
0 评论