Expand description
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.
Examples
Example of matching out all unexpected server status codes.
use ureq::Error;
match ureq::get("http://mypage.example.com/").call() {
Ok(response) => { /* it worked */},
Err(Error::Status(code, response)) => {
/* the server returned an unexpected status
code (such as 400, 500 etc) */
}
Err(_) => { /* some kind of io/transport error */ }
}
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.
use std::{result::Result, time::Duration, thread};
use ureq::{Response, Error, Error::Status};
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 OrAnyStatus::or_any_status like this:
use ureq::Error::Status;
use ureq::OrAnyStatus;
let resp = ureq::get("http://example.com/")
.call()
.or_any_status()?;
Variants
Status(u16, Response)
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
sourceimpl Error
impl Error
sourcepub fn into_transport(self) -> Option<Transport>
pub fn into_transport(self) -> Option<Transport>
Optionally turn this error into an underlying Transport
.
None
if the underlying error is Error::Status
.
sourcepub fn into_response(self) -> Option<Response>
pub fn into_response(self) -> Option<Response>
Optionally turn this error into an underlying Response
.
None
if the underlying error is Error::Transport
.
Trait Implementations
sourceimpl Error for Error
impl Error for Error
sourcefn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
The lower-level source of this error, if any. Read more
sourcefn backtrace(&self) -> Option<&Backtrace>
fn backtrace(&self) -> Option<&Backtrace>
backtrace
)Returns a stack backtrace, if available, of where this error occurred. Read more
1.0.0 · sourcefn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
sourceimpl From<ParseError> for Error
impl From<ParseError> for Error
sourcefn from(err: ParseError) -> Self
fn from(err: ParseError) -> Self
Converts to this type from the input type.
Auto Trait Implementations
impl !RefUnwindSafe for Error
impl Send for Error
impl Sync for Error
impl Unpin for Error
impl !UnwindSafe for Error
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more