surf

Struct Client

Source
pub struct Client { /* private fields */ }
Expand description

An HTTP client, capable of sending Requests and running a middleware stack.

Can be optionally set with a base url.

§Examples

let client = surf::Client::new();
let res1 = client.recv_string(surf::get("https://httpbin.org/get"));
let res2 = client.recv_string(surf::get("https://httpbin.org/get"));
let (str1, str2) = futures_util::future::try_join(res1, res2).await?;

Implementations§

Source§

impl Client

Source

pub fn new() -> Self

Create a new Client instance.

§Examples
let client = surf::Client::new();

let req = surf::get("https://httpbin.org/get");
let res = client.send(req).await?;
Source

pub fn with_http_client<C: HttpClient>(http_client: C) -> Self

Create a new Client instance with an http_client::HttpClient backend.

§Examples
use http_client::isahc::IsahcClient;
let client = surf::Client::with_http_client(IsahcClient::new());
Source

pub fn with(self, middleware: impl Middleware) -> Self

Push middleware onto the middleware stack.

See the middleware submodule for more information on middleware.

§Examples
let req = surf::get("https://httpbin.org/get");
let client = surf::client()
    .with(surf::middleware::Redirect::default());
let res = client.send(req).await?;
Source

pub async fn send(&self, req: impl Into<Request>) -> Result<Response>

Send a Request using this client.

Client middleware is run before per-request middleware.

§Examples
let req = surf::get("https://httpbin.org/get");
let client = surf::client();
let res = client.send(req).await?;
Source

pub async fn recv_bytes(&self, req: impl Into<Request>) -> Result<Vec<u8>>

Submit a Request and get the response body as bytes.

§Examples
let req = surf::get("https://httpbin.org/get");
let bytes = surf::client().recv_bytes(req).await?;
assert!(bytes.len() > 0);
Source

pub async fn recv_string(&self, req: impl Into<Request>) -> Result<String>

Submit a Request and get the response body as a string.

§Examples
let req = surf::get("https://httpbin.org/get");
let string = surf::client().recv_string(req).await?;
assert!(string.len() > 0);
Source

pub async fn recv_json<T: DeserializeOwned>( &self, req: impl Into<Request>, ) -> Result<T>

Submit a Request and decode the response body from json into a struct.

§Examples
#[derive(Deserialize, Serialize)]
struct Ip {
    ip: String
}

let req = surf::get("https://api.ipify.org?format=json");
let Ip { ip } = surf::client().recv_json(req).await?;
assert!(ip.len() > 10);
Source

pub async fn recv_form<T: DeserializeOwned>( &self, req: impl Into<Request>, ) -> Result<T>

Submit a Request and decode the response body from form encoding into a struct.

§Errors

Any I/O error encountered while reading the body is immediately returned as an Err.

If the body cannot be interpreted as valid json for the target type T, an Err is returned.

§Examples
#[derive(Deserialize, Serialize)]
struct Body {
    apples: u32
}

let req = surf::get("https://api.example.com/v1/response");
let Body { apples } = surf::client().recv_form(req).await?;
Source

pub fn get(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP GET request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.get("https://httpbin.org/get").recv_string().await?;
Source

pub fn head(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP HEAD request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.head("https://httpbin.org/head").recv_string().await?;
Source

pub fn post(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP POST request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.post("https://httpbin.org/post").recv_string().await?;
Source

pub fn put(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP PUT request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.put("https://httpbin.org/put").recv_string().await?;
Source

pub fn delete(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP DELETE request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.delete("https://httpbin.org/delete").recv_string().await?;
Source

pub fn connect(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP CONNECT request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.connect("https://httpbin.org/connect").recv_string().await?;
Source

pub fn options(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP OPTIONS request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.options("https://httpbin.org/options").recv_string().await?;
Source

pub fn trace(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP TRACE request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.trace("https://httpbin.org/trace").recv_string().await?;
Source

pub fn patch(&self, uri: impl AsRef<str>) -> RequestBuilder

Perform an HTTP PATCH request using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
let client = surf::client();
let string = client.patch("https://httpbin.org/patch").recv_string().await?;
Source

pub fn request(&self, verb: Method, uri: impl AsRef<str>) -> RequestBuilder

Perform a HTTP request with the given verb using the Client connection.

§Panics

This will panic if a malformed URL is passed.

§Errors

Returns errors from the middleware, http backend, and network sockets.

§Examples
use http_types::Method;
let client = surf::client();
let req = client.request(Method::Get, "http://httpbin.org/get");
let res = client.send(req).await?;
Source

pub fn set_base_url(&mut self, base: Url)

👎Deprecated since 6.5.0: Please use Config instead

Sets the base URL for this client. All request URLs will be relative to this URL.

Note: a trailing slash is significant. Without it, the last path component is considered to be a “file” name to be removed to get at the “directory” that is used as the base.

§Examples
let mut client = surf::client();
client.set_base_url(Url::parse("http://example.com/api/v1/")?);
client.get("posts.json").recv_json().await?; /// http://example.com/api/v1/posts.json
Source

pub fn config(&self) -> &Config

Get the current configuration.

Trait Implementations§

Source§

impl Clone for Client

Source§

fn clone(&self) -> Self

Clones the Client.

This copies the middleware stack from the original, but shares the HttpClient and http client config of the original. Note that individual middleware in the middleware stack are still shared by reference.

1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Client

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Default for Client

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl TryFrom<Config> for Client

Source§

type Error = <IsahcClient as TryFrom<Config>>::Error

The type returned in the event of a conversion error.
Source§

fn try_from(config: Config) -> Result<Self, Self::Error>

Performs the conversion.

Auto Trait Implementations§

§

impl Freeze for Client

§

impl !RefUnwindSafe for Client

§

impl Send for Client

§

impl Sync for Client

§

impl Unpin for Client

§

impl !UnwindSafe for Client

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

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

Source§

fn into(self) -> U

Calls U::from(self).

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

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

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

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

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

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T