如何在 Rust Hyper 中将响应主体读取为字符串?
How to read the response body as a string in Rust Hyper?
这个问题有几个答案 (here, , and here),但其中 none 个对我有用:(
到目前为止我尝试过的:
use hyper as http;
use futures::TryStreamExt;
fn test_heartbeat() {
let mut runtime = tokio::runtime::Runtime::new().expect("Could not get default runtime");
runtime.spawn(httpserve());
let addr = "http://localhost:3030".parse().unwrap();
let expected = json::to_string(&HeartBeat::default()).unwrap();
let client = http::Client::new();
let actual = runtime.block_on(client.get(addr));
assert!(actual.is_ok());
if let Ok(response) = actual {
let (_, body) = response.into_parts();
// what shall be done here?
}
}
我不确定,这里要做什么?
根据justinas答案是:
// ...
let bytes = runtime.block_on(hyper::body::to_bytes(body)).unwrap();
let result = String::from_utf8(bytes.into_iter().collect()).expect("");
这对我有用(使用 hyper 0.2.1):
async fn body_to_string(req: Request<Body>) -> String {
let body_bytes = hyper::body::to_bytes(req.into_body()).await?;
String::from_utf8(body_bytes.to_vec()).unwrap()
}
这个问题有几个答案 (here,
到目前为止我尝试过的:
use hyper as http;
use futures::TryStreamExt;
fn test_heartbeat() {
let mut runtime = tokio::runtime::Runtime::new().expect("Could not get default runtime");
runtime.spawn(httpserve());
let addr = "http://localhost:3030".parse().unwrap();
let expected = json::to_string(&HeartBeat::default()).unwrap();
let client = http::Client::new();
let actual = runtime.block_on(client.get(addr));
assert!(actual.is_ok());
if let Ok(response) = actual {
let (_, body) = response.into_parts();
// what shall be done here?
}
}
我不确定,这里要做什么?
根据justinas答案是:
// ...
let bytes = runtime.block_on(hyper::body::to_bytes(body)).unwrap();
let result = String::from_utf8(bytes.into_iter().collect()).expect("");
这对我有用(使用 hyper 0.2.1):
async fn body_to_string(req: Request<Body>) -> String {
let body_bytes = hyper::body::to_bytes(req.into_body()).await?;
String::from_utf8(body_bytes.to_vec()).unwrap()
}