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.


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.


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);