[−][src]Enum ureq::Error
An error that may occur when processing a Request.
This can represent connection-level errors (e.g. connection refused),
protocol-level errors (malformed response), or status code errors
(e.g. 404 Not Found). Status code errors are represented by the
Status enum variant, while connection-level and
protocol-level errors are represented by the Transport
enum variant. You can use a match statement to extract a Response
from a Status
error. For instance, you may want to read the full
body of a response because you expect it to contain a useful error
message. Or you may want to handle certain error code responses
differently.
use std::{result::Result, time::Duration, thread}; use ureq::{Response, Error, Error::Status}; // An example of a function that handles HTTP 429 and 500 errors differently // than other errors. They get retried after a suitable delay, up to 4 times. fn get_response(url: &str) -> Result<Response, Error> { for _ in 1..4 { match ureq::get(url).call() { Err(Status(503, r)) | Err(Status(429, r)) => { let retry: Option<u64> = r.header("retry-after").and_then(|h| h.parse().ok()); let retry = retry.unwrap_or(5); eprintln!("{} for {}, retry in {}", r.status(), r.get_url(), retry); thread::sleep(Duration::from_secs(retry)); } result => return result, }; } // Ran out of retries; try one last time and return whatever result we get. ureq::get(url).call() }
If you'd like to treat all status code errors as normal, successful responses, you can use Result::or_else like this:
use ureq::Error::Status; let resp = ureq::get("http://example.com/") .call() .or_else(|e| match e { Status(_, r) => Ok(r), // turn status errors into Ok Responses. _ => Err(e), })?;
Variants
A response was successfully received but had status code >= 400. Values are (status_code, Response).
Transport(Transport)
There was an error making the request or receiving the response.
Implementations
impl Error
[src]
pub fn kind(&self) -> ErrorKind
[src]
The type of this error.
let err = ureq::get("http://httpbin.org/status/500") .call().unwrap_err(); assert_eq!(err.kind(), ureq::ErrorKind::HTTP);
Trait Implementations
impl Debug for Error
[src]
impl Display for Error
[src]
impl Error for Error
[src]
pub fn source(&self) -> Option<&(dyn Error + 'static)>
[src]
pub fn backtrace(&self) -> Option<&Backtrace>
[src]
pub fn description(&self) -> &str
1.0.0[src]
pub fn cause(&self) -> Option<&dyn Error>
1.0.0[src]
impl From<Error> for Error
[src]
impl From<Response> for Error
[src]
impl From<Transport> for Error
[src]
Auto Trait Implementations
impl !RefUnwindSafe for Error
[src]
impl Send for Error
[src]
impl Sync for Error
[src]
impl Unpin for Error
[src]
impl !UnwindSafe for Error
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,