#[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::Client
s 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: Config
Underlying 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
:0
is disallowed and asserts as otherwise it would cause a semaphore deadlock.curl-client
:0
allows 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()?;