diff --git a/rpc-client/src/http_sender.rs b/rpc-client/src/http_sender.rs index 902f86ce63..6ef22cc42c 100644 --- a/rpc-client/src/http_sender.rs +++ b/rpc-client/src/http_sender.rs @@ -47,6 +47,31 @@ impl HttpSender { /// /// The URL is an HTTP URL, usually for port 8899. pub fn new_with_timeout(url: U, timeout: Duration) -> Self { + Self::new_with_client( + url, + reqwest::Client::builder() + .default_headers(Self::default_headers()) + .timeout(timeout) + .pool_idle_timeout(timeout) + .build() + .expect("build rpc client"), + ) + } + + /// Create an HTTP RPC sender. + /// + /// Most flexible way to create a sender. Pass a created `reqwest::Client`. + pub fn new_with_client(url: U, client: reqwest::Client) -> Self { + Self { + client: Arc::new(client), + url: url.to_string(), + request_id: AtomicU64::new(0), + stats: RwLock::new(RpcTransportStats::default()), + } + } + + /// Create default headers used by HTTP Sender. + pub fn default_headers() -> header::HeaderMap { let mut default_headers = header::HeaderMap::new(); default_headers.append( header::HeaderName::from_static("solana-client"), @@ -55,22 +80,7 @@ impl HttpSender { ) .unwrap(), ); - - let client = Arc::new( - reqwest::Client::builder() - .default_headers(default_headers) - .timeout(timeout) - .pool_idle_timeout(timeout) - .build() - .expect("build rpc client"), - ); - - Self { - client, - url: url.to_string(), - request_id: AtomicU64::new(0), - stats: RwLock::new(RpcTransportStats::default()), - } + default_headers } }