jsonrpsee_http_client

Struct HttpClientBuilder

source
pub struct HttpClientBuilder<L = Identity> { /* private fields */ }
Expand description

HTTP client builder.

§Examples


use jsonrpsee_http_client::{HttpClientBuilder, HeaderMap, HeaderValue};

#[tokio::main]
async fn main() {
    // Build custom headers used for every submitted request.
    let mut headers = HeaderMap::new();
    headers.insert("Any-Header-You-Like", HeaderValue::from_static("42"));

    // Build client
    let client = HttpClientBuilder::default()
         .set_headers(headers)
         .build("http://localhost")
         .unwrap();

    // use client....
}

Implementations§

source§

impl<L> HttpClientBuilder<L>

source

pub fn max_request_size(self, size: u32) -> Self

Set the maximum size of a request body in bytes. Default is 10 MiB.

source

pub fn max_response_size(self, size: u32) -> Self

Set the maximum size of a response in bytes. Default is 10 MiB.

source

pub fn request_timeout(self, timeout: Duration) -> Self

Set request timeout (default is 60 seconds).

source

pub fn max_concurrent_requests(self, max_concurrent_requests: usize) -> Self

Set the maximum number of concurrent requests. Default disabled.

source

pub fn with_custom_cert_store(self, cfg: CustomCertStore) -> Self

Force to use the rustls native certificate store.

Since multiple certificate stores can be optionally enabled, this option will force the native certificate store to be used.

§Optional

This requires the optional tls feature.

§Example
use jsonrpsee_http_client::{HttpClientBuilder, CustomCertStore};
use rustls::{
    client::danger::{self, HandshakeSignatureValid, ServerCertVerified},
    pki_types::{CertificateDer, ServerName, UnixTime},
    Error,
};

#[derive(Debug)]
struct NoCertificateVerification;

impl rustls::client::danger::ServerCertVerifier for NoCertificateVerification {
    fn verify_server_cert(
        &self,
        _: &CertificateDer<'_>,
        _: &[CertificateDer<'_>],
        _: &ServerName<'_>,
        _: &[u8],
        _: UnixTime,
    ) -> Result<ServerCertVerified, Error> {
        Ok(ServerCertVerified::assertion())
    }

    fn supported_verify_schemes(&self) -> Vec<rustls::SignatureScheme> {
        vec![rustls::SignatureScheme::ECDSA_NISTP256_SHA256]
    }

    fn verify_tls12_signature(
        &self,
        _: &[u8],
        _: &CertificateDer<'_>,
        _: &rustls::DigitallySignedStruct,
    ) -> Result<rustls::client::danger::HandshakeSignatureValid, Error> {
        Ok(HandshakeSignatureValid::assertion())
    }

    fn verify_tls13_signature(
        &self,
        _: &[u8],
        _: &CertificateDer<'_>,
        _: &rustls::DigitallySignedStruct,
    ) -> Result<HandshakeSignatureValid, Error> {
        Ok(HandshakeSignatureValid::assertion())
    }
}

let tls_cfg = CustomCertStore::builder()
   .dangerous()
   .with_custom_certificate_verifier(std::sync::Arc::new(NoCertificateVerification))
   .with_no_client_auth();

// client builder with disabled certificate verification.
let client_builder = HttpClientBuilder::new().with_custom_cert_store(tls_cfg);
source

pub fn id_format(self, id_kind: IdKind) -> Self

Configure the data type of the request object ID (default is number).

source

pub fn set_max_logging_length(self, max: u32) -> Self

Max length for logging for requests and responses in number characters.

Logs bigger than this limit will be truncated.

source

pub fn set_headers(self, headers: HeaderMap) -> Self

Set a custom header passed to the server with every request (default is none).

The caller is responsible for checking that the headers do not conflict or are duplicated.

source

pub fn set_tcp_no_delay(self, no_delay: bool) -> Self

Configure TCP_NODELAY on the socket to the supplied value nodelay.

Default is true.

source

pub fn set_http_middleware<T>( self, service_builder: ServiceBuilder<T>, ) -> HttpClientBuilder<T>

Set custom tower middleware.

source§

impl<B, S, L> HttpClientBuilder<L>
where L: Layer<HttpBackend, Service = S>, S: Service<HttpRequest, Response = HttpResponse<B>, Error = Error> + Clone, B: Body<Data = Bytes> + Send + Unpin + 'static, B::Data: Send, B::Error: Into<BoxError>,

source

pub fn build(self, target: impl AsRef<str>) -> Result<HttpClient<S>, Error>

Build the HTTP client with target to connect to.

source§

impl HttpClientBuilder<Identity>

source

pub fn new() -> HttpClientBuilder<Identity>

Create a new builder.

Trait Implementations§

source§

impl<L: Debug> Debug for HttpClientBuilder<L>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl Default for HttpClientBuilder<Identity>

source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

§

impl<L> Freeze for HttpClientBuilder<L>
where L: Freeze,

§

impl<L = Identity> !RefUnwindSafe for HttpClientBuilder<L>

§

impl<L> Send for HttpClientBuilder<L>
where L: Send,

§

impl<L> Sync for HttpClientBuilder<L>
where L: Sync,

§

impl<L> Unpin for HttpClientBuilder<L>
where L: Unpin,

§

impl<L = Identity> !UnwindSafe for HttpClientBuilder<L>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> MaybeSend for T
where T: Send,