Function hyper::body::to_bytes

source ·
pub async fn to_bytes<T>(body: T) -> Result<Bytes, T::Error>
where T: HttpBody,
Expand description

Concatenate the buffers from a body into a single Bytes asynchronously.

This may require copying the data into a single buffer. If you don’t need a contiguous buffer, prefer the aggregate function.

Note

Care needs to be taken if the remote is untrusted. The function doesn’t implement any length checks and an malicious peer might make it consume arbitrary amounts of memory. Checking the Content-Length is a possibility, but it is not strictly mandated to be present.

Example

use hyper::{body::HttpBody};

let response = client.request(request).await?;

const MAX_ALLOWED_RESPONSE_SIZE: u64 = 1024;

let response_content_length = match response.body().size_hint().upper() {
    Some(v) => v,
    None => MAX_ALLOWED_RESPONSE_SIZE + 1 // Just to protect ourselves from a malicious response
};

if response_content_length < MAX_ALLOWED_RESPONSE_SIZE {
    let body_bytes = hyper::body::to_bytes(response.into_body()).await?;
    println!("body: {:?}", body_bytes);
}