Struct Response

struct Response { ... }

A Response to a submitted Request.

Implementations

impl Response

fn status(self: &Self) -> StatusCode

Get the StatusCode of this Response.

Examples

Checking for general status class:

# #[cfg(feature = "json")]
# fn run() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::blocking::get("http://httpbin.org/get")?;
if resp.status().is_success() {
    println!("success!");
} else if resp.status().is_server_error() {
    println!("server error!");
} else {
    println!("Something else happened. Status: {:?}", resp.status());
}
# Ok(())
# }

Checking for specific status codes:

use reqwest::blocking::Client;
use reqwest::StatusCode;
# fn run() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();

let resp = client.post("http://httpbin.org/post")
    .body("possibly too large")
    .send()?;

match resp.status() {
    StatusCode::OK => println!("success!"),
    StatusCode::PAYLOAD_TOO_LARGE => {
        println!("Request payload is too large!");
    }
    s => println!("Received response status: {s:?}"),
};
# Ok(())
# }
fn headers(self: &Self) -> &HeaderMap

Get the Headers of this Response.

Example

Saving an etag when caching a file:

use reqwest::blocking::Client;
use reqwest::header::ETAG;

# fn run() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();

let mut resp = client.get("http://httpbin.org/cache").send()?;
if resp.status().is_success() {
    if let Some(etag) = resp.headers().get(ETAG) {
        std::fs::write("etag", etag.as_bytes());
    }
    let mut file = std::fs::File::create("file")?;
    resp.copy_to(&mut file)?;
}
# Ok(())
# }
fn headers_mut(self: &mut Self) -> &mut HeaderMap

Get a mutable reference to the Headers of this Response.

fn version(self: &Self) -> Version

Get the HTTP Version of this Response.

fn url(self: &Self) -> &Url

Get the final Url of this Response.

Example

# fn run() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::blocking::get("http://httpbin.org/redirect/1")?;
assert_eq!(resp.url().as_str(), "http://httpbin.org/get");
# Ok(())
# }
fn remote_addr(self: &Self) -> Option<SocketAddr>

Get the remote address used to get this Response.

Example

# fn run() -> Result<(), Box<dyn std::error::Error>> {
let resp = reqwest::blocking::get("http://httpbin.org/redirect/1")?;
println!("httpbin.org address: {:?}", resp.remote_addr());
# Ok(())
# }
fn extensions(self: &Self) -> &Extensions

Returns a reference to the associated extensions.

fn extensions_mut(self: &mut Self) -> &mut Extensions

Returns a mutable reference to the associated extensions.

fn content_length(self: &Self) -> Option<u64>

Get the content length of the response, if it is known.

This value does not directly represents the value of the Content-Length header, but rather the size of the response's body. To read the header's value, please use the Response::headers method instead.

Reasons it may not be known:

  • The response does not include a body (e.g. it responds to a HEAD request).
  • The response is gzipped and automatically decoded (thus changing the actual decoded length).
fn json<T: DeserializeOwned>(self: Self) -> Result<T>

Try and deserialize the response body as JSON using serde.

Optional

This requires the optional json feature enabled.

Examples

# extern crate reqwest;
# extern crate serde;
#
# use reqwest::Error;
# use serde::Deserialize;
#
// This `derive` requires the `serde` dependency.
#[derive(Deserialize)]
struct Ip {
    origin: String,
}

# fn run() -> Result<(), Error> {
let json: Ip = reqwest::blocking::get("http://httpbin.org/ip")?.json()?;
# Ok(())
# }
#
# fn main() { }

Errors

This method fails whenever the response body is not in JSON format, or it cannot be properly deserialized to target type T. For more details please see serde_json::from_reader.

fn bytes(self: Self) -> Result<Bytes>

Get the full response body as Bytes.

Example

# fn run() -> Result<(), Box<dyn std::error::Error>> {
let bytes = reqwest::blocking::get("http://httpbin.org/ip")?.bytes()?;

println!("bytes: {bytes:?}");
# Ok(())
# }
fn text(self: Self) -> Result<String>

Get the response text.

This method decodes the response body with BOM sniffing and with malformed sequences replaced with the char::REPLACEMENT_CHARACTER. Encoding is determined from the charset parameter of Content-Type header, and defaults to utf-8 if not presented.

Note

If the charset feature is disabled the method will only attempt to decode the response as UTF-8, regardless of the given Content-Type

Example

# extern crate reqwest;
# fn run() -> Result<(), Box<dyn std::error::Error>> {
let content = reqwest::blocking::get("http://httpbin.org/range/26")?.text()?;
# Ok(())
# }
fn text_with_charset(self: Self, default_encoding: &str) -> Result<String>

Get the response text given a specific encoding.

This method decodes the response body with BOM sniffing and with malformed sequences replaced with the char::REPLACEMENT_CHARACTER. You can provide a default encoding for decoding the raw message, while the charset parameter of Content-Type header is still prioritized. For more information about the possible encoding name, please go to encoding_rs docs.

Optional

This requires the optional charset feature enabled.

Example

# extern crate reqwest;
# fn run() -> Result<(), Box<dyn std::error::Error>> {
let content = reqwest::blocking::get("http://httpbin.org/range/26")?
    .text_with_charset("utf-8")?;
# Ok(())
# }
fn copy_to<W>(self: &mut Self, w: &mut W) -> Result<u64>
where
    W: Write + ?Sized

Copy the response body into a writer.

This function internally uses std::io::copy and hence will continuously read data from the body and then write it into writer in a streaming fashion until EOF is met.

On success, the total number of bytes that were copied to writer is returned.

Example

# fn run() -> Result<(), Box<dyn std::error::Error>> {
let mut resp = reqwest::blocking::get("http://httpbin.org/range/5")?;
let mut buf: Vec<u8> = vec![];
resp.copy_to(&mut buf)?;
assert_eq!(b"abcde", buf.as_slice());
# Ok(())
# }
fn error_for_status(self: Self) -> Result<Self>

Turn a response into an error if the server returned an error.

Example

# extern crate reqwest;
# fn run() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::get("http://httpbin.org/status/400")?
    .error_for_status();
if let Err(err) = res {
    assert_eq!(err.status(), Some(reqwest::StatusCode::BAD_REQUEST));
}
# Ok(())
# }
# fn main() {}
fn error_for_status_ref(self: &Self) -> Result<&Self>

Turn a reference to a response into an error if the server returned an error.

Example

# extern crate reqwest;
# fn run() -> Result<(), Box<dyn std::error::Error>> {
let res = reqwest::blocking::get("http://httpbin.org/status/400")?;
let res = res.error_for_status_ref();
if let Err(err) = res {
    assert_eq!(err.status(), Some(reqwest::StatusCode::BAD_REQUEST));
}
# Ok(())
# }
# fn main() {}

impl Debug for Response

fn fmt(self: &Self, f: &mut Formatter<'_>) -> Result

impl Freeze for Response

impl Read for Response

fn read(self: &mut Self, buf: &mut [u8]) -> Result<usize>

impl RefUnwindSafe for Response

impl Send for Response

impl Sync for Response

impl Unpin for Response

impl UnsafeUnpin for Response

impl UnwindSafe for Response

impl<T> Any for Response

fn type_id(self: &Self) -> TypeId

impl<T> Borrow for Response

fn borrow(self: &Self) -> &T

impl<T> BorrowMut for Response

fn borrow_mut(self: &mut Self) -> &mut T

impl<T> ErasedDestructor for Response

impl<T> From for Response

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> Instrument for Response

impl<T> PolicyExt for Response

fn and<P, B, E>(self: Self, other: P) -> And<T, P>
where
    T: Policy<B, E>,
    P: Policy<B, E>
fn or<P, B, E>(self: Self, other: P) -> Or<T, P>
where
    T: Policy<B, E>,
    P: Policy<B, E>

impl<T> WithSubscriber for Response

impl<T, U> Into for Response

fn into(self: Self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of [From]<T> for U chooses to do.

impl<T, U> TryFrom for Response

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

impl<T, U> TryInto for Response

fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>

impl<T: Into<async_impl::body::Body>> From for Response

fn from(r: Response<T>) -> Response