leyline-http 0.1.5

HTTP client that impersonates Chrome, Firefox, and Safari on the wire: TLS (JA3/JA4), HTTP/2, and HTTP/3 fingerprints
Documentation
use std::sync::{Arc, Mutex};

use crate::tls::FingerprintConnector;

use super::super::{Session, SessionInner};
use super::SessionBuilder;
use super::derive::DerivedIdentity;

impl SessionBuilder {
    pub(super) fn into_session(
        self,
        derived: DerivedIdentity,
        connector: FingerprintConnector,
    ) -> Session {
        let impersonates = self.impersonates();
        let pool = Arc::new(self.build_pool());
        let cookie_jar = self.cookie_jar.unwrap_or_default();

        Session {
            inner: Arc::new(SessionInner {
                browser: derived.browser,
                impersonates,
                header_style: derived.header_style,
                identity: derived.identity,
                platform: derived.platform,
                brand: self.brand,
                user_agent: derived.user_agent,
                sec_ch_ua: derived.sec_ch_ua,
                accept_language: derived.accept_language,
                header_order: derived.header_order,
                default_headers: self.default_headers,
                bearer: self.bearer,
                proxy_config: self.proxy_config,
                timeouts: self.timeouts,
                redirect_policy: self.redirect_policy,
                compression: self.compression,
                #[cfg(feature = "websocket")]
                websocket_config: self.websocket_config,
                https_only: self.https_only,
                cookie_jar,
                url_cache: Arc::new(Mutex::new(None)),
                connector,
                h2_config: derived.h2_config,
                pool,
                shutdown: tokio_util::sync::CancellationToken::new(),
                audit_tls: derived.audit_tls,
                protocol_policy: self.protocol_policy,
                default_retry: self.default_retry,
                trace: self.trace,
                tls_trust: self.tls_trust.clone(),
                #[cfg(feature = "http3")]
                h3_config: derived.h3_config,
                profile: derived.profile,
                base_url: self.base_url,
                languages: self.languages,
                host_limits: self.host_limits.armed(),
                #[cfg(feature = "html")]
                crawl_limits: Arc::default(),
                #[cfg(feature = "html")]
                crawl_pace: None,
                proxy_pool: self.proxy_pool,
            }),
        }
    }
}