Struct Response

pub struct Response { /* private fields */ }

A Response to a submitted Request.

Implementations

impl Response

fn status(&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) -> &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(&mut self) -> &mut HeaderMap

Get a mutable reference to the Headers of this Response.

fn version(&self) -> Version

Get the HTTP Version of this Response.

fn url(&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) -> 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) -> &Extensions

Returns a reference to the associated extensions.

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

Returns a mutable reference to the associated extensions.

fn content_length(&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) -> 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) -> 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) -> 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, 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>(&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) -> 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) -> 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() {}

Trait Implementations

impl Debug for Response

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

impl Read for Response

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

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

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

Auto Trait Implementations

impl !RefUnwindSafe for Response

impl !UnwindSafe for Response

impl Freeze for Response

impl Send for Response

impl Sync for Response

impl Unpin for Response

impl UnsafeUnpin for Response

Blanket Implementations

impl<T> Any for Response where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

impl<T> Borrow<T> for Response where T: ?Sized,

fn borrow(&self) -> &T

impl<T> BorrowMut<T> for Response where T: ?Sized,

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

impl<T> From<T> for Response

fn from(t: T) -> T

Returns the argument unchanged.

impl<T> Instrument for Response

impl<T> PolicyExt for Response where T: ?Sized,

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

impl<T> WithSubscriber for Response

impl<T, U> Into<U> for Response where U: From<T>,

fn into(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<U> for Response where U: Into<T>,

type Error = never;
fn try_from(value: U) -> Result<T, never>

impl<T, U> TryInto<U> for Response where U: TryFrom<T>,

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