Skip to main content

specter/
lib.rs

1//! # Specter
2//!
3//! HTTP client with full TLS/HTTP2 fingerprint control.
4//!
5//! Specter provides HTTP/1.1, HTTP/2, and HTTP/3 support with BoringSSL-based
6//! TLS fingerprinting (JA3/JA4) across all protocols.
7
8// Opt-in mimalloc as the global allocator. Enabled via the `mimalloc`
9// feature; ships off by default so the system allocator continues to
10// govern downstream consumers that do not opt in.
11#[cfg(feature = "mimalloc")]
12#[global_allocator]
13static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;
14
15// Core modules
16pub mod auth;
17pub mod cache;
18pub mod cookie;
19pub mod error;
20pub mod headers;
21pub mod request;
22pub mod response;
23pub mod timeouts;
24pub mod url;
25pub mod version;
26pub mod websocket;
27
28// Fingerprinting
29pub mod fingerprint;
30
31// Transport layer
32pub mod transport;
33
34// Connection pooling
35pub mod pool;
36
37// Re-exports for convenient access
38pub use cookie::{hash_cookie_value, CookieJar};
39pub use error::{Error, Result};
40pub use fingerprint::{FingerprintProfile, PriorityTree};
41pub use headers::Headers;
42pub use headers::HeadersBuilder;
43pub use headers::OrderedHeaders;
44pub use request::{IntoUrl, RedirectPolicy, Request, RequestBody, RequestBodyStream};
45pub use response::{Body, Response};
46pub use timeouts::{recv_with_idle_timeout, Timeouts};
47pub use url::Url;
48pub use version::HttpVersion;
49pub use websocket::{
50    CloseCode, CloseFrame, Message, PreparedMessage, WebSocket, WebSocketBuilder, WebSocketConfig,
51    WebSocketError, WebSocketFrame, WebSocketFrameOpcode, WebSocketReader, WebSocketResult,
52    WebSocketWriter,
53};
54
55// Transport re-exports
56pub use transport::connector::{AlpnProtocol, BoringConnector, MaybeHttpsStream};
57pub use transport::dns::{DnsConfig, Resolve, ResolveFuture};
58pub use transport::h1::H1Connection;
59pub use transport::h1_h2::{
60    CapacityPolicy, Client, ClientBuilder, RequestBuilder, WebSocketH3Builder,
61};
62pub use transport::h2::{H2ClientBuilder, H2Connection, H2PooledConnection, PseudoHeaderOrder};
63pub use transport::h3::{H3Backend, H3Client, H3TransportConfig, H3Tunnel, H3TunnelEvent};
64pub use transport::session::SessionCache;
65pub use transport::tcp::{TcpFingerprint, TcpSocketBuffers};
66
67// Pool re-exports
68pub use pool::alt_svc::{AltSvcCache, AltSvcEntry};
69pub use pool::multiplexer::{ConnectionPool, PoolEntry, PoolKey};