1

我正在尝试制作一个小型应用程序,它将作为接受 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 字符串,但我不知道如何首先获得数据。

4

0 回答 0