#[non_exhaustive]pub struct Config {
pub base_url: Option<Url>,
pub headers: HashMap<HeaderName, HeaderValues>,
pub http_config: Config,
pub http_client: Option<Arc<dyn HttpClient>>,
}Expand description
Configuration for surf::Clients and their underlying HTTP clients.
use std::convert::TryInto;
use surf::{Client, Config, Url};
let client: Client = Config::new()
.set_base_url(Url::parse("https://example.org")?)
.try_into()?;
let mut response = client.get("/").await?;
println!("{}", response.body_string().await?);Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. } syntax; cannot be matched against without a wildcard ..; and struct update syntax will not work.base_url: Option<Url>The base URL for a 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.
headers: HashMap<HeaderName, HeaderValues>Headers to be applied to every request made by this client.
http_config: ConfigUnderlying HTTP client config.
http_client: Option<Arc<dyn HttpClient>>Optional custom http client.
Implementations§
Source§impl Config
impl Config
Sourcepub fn add_header(
self,
name: impl Into<HeaderName>,
values: impl ToHeaderValues,
) -> Result<Self>
pub fn add_header( self, name: impl Into<HeaderName>, values: impl ToHeaderValues, ) -> Result<Self>
Adds a header to be added to every request by this client.
Default: No extra headers.
use std::convert::TryInto;
use surf::{Client, Config};
use surf::http::auth::BasicAuth;
let auth = BasicAuth::new("Username", "Password");
let client: Client = Config::new()
.add_header(auth.name(), auth.value())?
.try_into()?;Sourcepub fn set_base_url(self, base: Url) -> Self
pub fn set_base_url(self, base: Url) -> Self
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.
Default: None (internally).
use std::convert::TryInto;
use surf::{Client, Config, Url};
let client: Client = Config::new()
.set_base_url(Url::parse("https://example.org")?)
.try_into()?;Sourcepub fn set_http_keep_alive(self, keep_alive: bool) -> Self
pub fn set_http_keep_alive(self, keep_alive: bool) -> Self
Set HTTP/1.1 keep-alive (connection pooling).
Default: true.
Note: Does nothing on wasm-client (or native-client on wasm32).
Sourcepub fn set_tcp_no_delay(self, no_delay: bool) -> Self
pub fn set_tcp_no_delay(self, no_delay: bool) -> Self
Set TCP NO_DELAY.
Default: false.
Note: Does nothing on wasm-client (or native-client on wasm32).
Sourcepub fn set_timeout(self, timeout: Option<Duration>) -> Self
pub fn set_timeout(self, timeout: Option<Duration>) -> Self
Set connection timeout duration.
Passing None will remove the timeout.
Default: Some(Duration::from_secs(60)).
use std::convert::TryInto;
use std::time::Duration;
use surf::{Client, Config};
let client: Client = Config::new()
.set_timeout(Some(Duration::from_secs(5)))
.try_into()?;Sourcepub fn set_max_connections_per_host(
self,
max_connections_per_host: usize,
) -> Self
pub fn set_max_connections_per_host( self, max_connections_per_host: usize, ) -> Self
Set the maximum number of simultaneous connections that this client is allowed to keep open to individual hosts at one time.
Default: 50.
This number is based on a few random benchmarks and see whatever gave decent perf vs resource use in Orogene.
Note: The behavior of this is different depending on the backend in use.
h1-client:0is disallowed and asserts as otherwise it would cause a semaphore deadlock.curl-client:0allows for limitless connections per host.hyper-client: No effect. Hyper does not support such an option.wasm-client: No effect. Web browsers do not support such an option.
Sourcepub fn set_http_client(self, http_client: impl HttpClient) -> Self
pub fn set_http_client(self, http_client: impl HttpClient) -> Self
Override the http client entirely.
When using this, any underlying http_client::Config http configuration will be ignored.
use std::convert::TryInto;
use surf::{Client, Config};
// Connect directly to a Tide server, e.g. for testing.
let server = tide::new();
let client: Client = Config::new()
.set_http_client(server)
.try_into()?;