我正在尝试使用 Rust 的 reqwest 框架进行 POST 请求。这是 cargo.toml 文件的片段:
[dependencies]
tokio = { version = "0.2", features = ["full"] }
reqwest = { version = "0.10", features = ["json"] }
这里是我从中发出请求到简单服务器的代码片段。
use reqwest::{Response, StatusCode};
use serde_json::{json, Value};
#[tokio::main]
async fn main() -> Result< (), reqwest::Error> {
let map1 = json!({
"abc":"abc",
"efg":"efg"
});
let body: Value = reqwest::Client::new()
.post("http://localhost:4000/hello")
.json(&map1)
.send()
.await?
.json()
.await?;
println!("Data is : {:?}", body);
Ok(())
}
使用简单服务器crate编写的代码片段,我正在用它提供此请求:
use simple_server::{Server, StatusCode};
fn main() {
let server = Server::new(|req, mut response| {
println!(
"Request received {} {} {:?}",
req.method(),
req.uri(),
&req.body()
);
match (req.method().as_str(), req.uri().path()) {
("GET", "/") => Ok(response.body(format!("Get request").into_bytes())?),
("POST", "/hello") => Ok(response.body(format!("Post request").into_bytes())?),
(_, _) => {
response.status(StatusCode::NOT_FOUND);
Ok(response.body(String::from("Not Found").into_bytes())?)
}
}
});
server.listen("127.0.0.1", "4000");
}
我得到的输出是:
Request received POST /hello []
期望的输出是字节向量数组,但我收到了一个空的字节向量数组。
我已经尝试过的解决方案有:
- 使用Postman向同一服务器进行POST请求,并且它可以正常工作。 - 使用相同的reqwest代码向任何其他服务器(例如hyper、actix等)进行POST请求,并且它可以正常工作。 - 将简单的内容发送为POST请求的正文(没有JSON)。但是仍然出现相同的问题。
因此,我认为问题必须与这个简单的服务器创建器有关。欢迎提出任何有价值的建议。
wget --post-file=...
),似乎随机显示数据或一个空结果。听起来像是simple-server
中的一个错误。 - Jmb