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 传回给客户端