我正在尝试制作一个小型应用程序,它将作为接受 GET 和 POST 请求的网络服务器运行。我已经启动并运行它,它接受两个请求,但我不知道如何从 POST 请求中提取数据。下面是让服务器启动并运行的代码:
extern crate futures;
extern crate hyper;
use hyper::service::service_fn_ok;
use hyper::{Body, Method, Response, Request, StatusCode};
// This is here because we use map_error.
use futures::{Future};
fn post_fn(req : Request<Body>) -> Response<Body> {
println!("In post!");
Response::new(Body::from("You posted something!"))
}
fn start_server() {
let router = || {
service_fn_ok( |req| match (req.method(), req.uri().path()) {
(&Method::GET, "/ping") => {
println!("In ping");
Response::new(Body::from("You pinged me!"))
}
(&Method::POST, "/") => {
post_fn(req)
}
(_, _) => {
let mut res = Response::new(Body::from("not found"));
*res.status_mut() = StatusCode::NOT_FOUND;
res
}
})
};
// Setup and run the server
let addr = "127.0.0.1:3000".parse::<std::net::SocketAddr>().unwrap();
let server = hyper::Server::bind(&addr).serve(router);
hyper::rt::run(server.map_err(|e| {
eprintln!("server error: {}", e);
}));
}
fn main() {
start_server();
}
基本上我想知道的是post_fn
需要什么才能打印出“你好” curl -X POST --data hello 'localhost:3000'
。最终数据将是我反序列化的 JSON 字符串,但我不知道如何首先获得数据。