pub(crate) use ::wreq::{Client, ClientBuilder, RequestBuilder, Response, StatusCode};
use kithara_platform::time::Duration;
use super::metrics::CountConnectionsLayer;
use crate::{
metrics::ConnectionMetrics,
types::{ImpersonatePreset, NetOptions},
};
pub(crate) type BackendError = ::wreq::Error;
impl From<ImpersonatePreset> for ::wreq_util::Emulation {
fn from(p: ImpersonatePreset) -> Self {
match p {
ImpersonatePreset::Safari => Self::Safari18,
ImpersonatePreset::Chrome => Self::Chrome137,
}
}
}
pub(crate) fn build_client(
options: &NetOptions,
metrics: &ConnectionMetrics,
) -> Result<Client, BackendError> {
let base = Client::builder()
.connector_layer(CountConnectionsLayer::new(metrics.clone()))
.emulation(::wreq_util::Emulation::from(options.impersonate))
.cookie_store(true)
.pool_max_idle_per_host(options.pool_max_idle_per_host)
.pool_idle_timeout(Some(Duration::from_secs(5)))
.cert_verification(!options.is_insecure);
super::apply_compression(base, options.compression).build()
}