org.apache.hc.client5.http.impl.sync

## Class HttpClientBuilder

- java.lang.Object
- - org.apache.hc.client5.http.impl.sync.HttpClientBuilder

    @NotThreadSafe
    public class HttpClientBuilder
    extends Object

Builder for `CloseableHttpClient` instances.

When a particular component is not explicitly set this class will use its default implementation. System properties will be taken into account when configuring the default implementations when `useSystemProperties()` method is called prior to calling `build()`.

- ssl.TrustManagerFactory.algorithm
- javax.net.ssl.trustStoreType
- javax.net.ssl.trustStore
- javax.net.ssl.trustStoreProvider
- javax.net.ssl.trustStorePassword
- ssl.KeyManagerFactory.algorithm
- javax.net.ssl.keyStoreType
- javax.net.ssl.keyStore
- javax.net.ssl.keyStoreProvider
- javax.net.ssl.keyStorePassword
- https.protocols
- https.cipherSuites
- http.proxyHost
- http.proxyPort
- http.nonProxyHosts
- http.keepAlive
- http.maxConnections
- http.agent

Please note that some settings used by this class can be mutually exclusive and may not apply when building `CloseableHttpClient` instances.

Since:
  4.3

### Constructor Summary

Constructors
`protected` `HttpClientBuilder()`

### Method Summary

Methods
`protected void` `addCloseable(Closeable closeable)` For internal use.
`HttpClientBuilder` `addInterceptorFirst(org.apache.hc.core5.http.HttpRequestInterceptor itcp)` Adds this protocol interceptor to the head of the protocol processing list.
`HttpClientBuilder` `addInterceptorFirst(org.apache.hc.core5.http.HttpResponseInterceptor itcp)` Adds this protocol interceptor to the head of the protocol processing list.
`HttpClientBuilder` `addInterceptorLast(org.apache.hc.core5.http.HttpRequestInterceptor itcp)` Adds this protocol interceptor to the tail of the protocol processing list.
`HttpClientBuilder` `addInterceptorLast(org.apache.hc.core5.http.HttpResponseInterceptor itcp)` Adds this protocol interceptor to the tail of the protocol processing list.
`CloseableHttpClient` `build()`
`static HttpClientBuilder` `create()`

`protected ClientExecChain`

`createMainExec(org.apache.hc.core5.http.impl.io.HttpRequestExecutor requestExec, HttpClientConnectionManager connManager, org.apache.hc.core5.http.ConnectionReuseStrategy reuseStrategy, ConnectionKeepAliveStrategy keepAliveStrategy, org.apache.hc.core5.http.protocol.HttpProcessor proxyHttpProcessor, AuthenticationStrategy targetAuthStrategy, AuthenticationStrategy proxyAuthStrategy, UserTokenHandler userTokenHandler)`
Produces an instance of `ClientExecChain` to be used as a main exec.

`protected ClientExecChain` `decorateMainExec(ClientExecChain mainExec)` For internal use.
`protected ClientExecChain` `decorateProtocolExec(ClientExecChain protocolExec)` For internal use.
`HttpClientBuilder` `disableAuthCaching()` Disables authentication scheme caching.
`HttpClientBuilder` `disableAutomaticRetries()` Disables automatic request recovery and re-execution.
`HttpClientBuilder` `disableConnectionState()` Disables connection state tracking.
`HttpClientBuilder` `disableContentCompression()` Disables automatic content decompression.
`HttpClientBuilder` `disableCookieManagement()` Disables state (cookie) management.
`HttpClientBuilder` `disableRedirectHandling()` Disables automatic redirect handling.
`HttpClientBuilder` `evictExpiredConnections()` Makes this instance of HttpClient proactively evict expired connections from the connection pool using a background thread.
`HttpClientBuilder` `evictIdleConnections(long maxIdleTime, TimeUnit maxIdleTimeUnit)` Makes this instance of HttpClient proactively evict idle connections from the connection pool using a background thread.
`HttpClientBuilder` `setBackoffManager(BackoffManager backoffManager)` Assigns `BackoffManager` instance.
`HttpClientBuilder` `setConnectionBackoffStrategy(ConnectionBackoffStrategy connectionBackoffStrategy)` Assigns `ConnectionBackoffStrategy` instance.
`HttpClientBuilder` `setConnectionManager(HttpClientConnectionManager connManager)` Assigns `HttpClientConnectionManager` instance.
`HttpClientBuilder` `setConnectionManagerShared(boolean shared)` Defines the connection manager is to be shared by multiple client instances.
`HttpClientBuilder` `setConnectionReuseStrategy(org.apache.hc.core5.http.ConnectionReuseStrategy reuseStrategy)` Assigns `ConnectionReuseStrategy` instance.
`HttpClientBuilder` `setConnectionTimeToLive(long connTimeToLive, TimeUnit connTimeToLiveTimeUnit)` Sets maximum time to live for persistent connections
`HttpClientBuilder` `setContentDecoderRegistry(Map<String,InputStreamFactory> contentDecoderMap)` Assigns a map of `InputStreamFactory`s to be used for automatic content decompression.
`HttpClientBuilder` `setDefaultAuthSchemeRegistry(org.apache.hc.core5.http.config.Lookup<AuthSchemeProvider> authSchemeRegistry)` Assigns default `AuthScheme` registry which will be used for request execution if not explicitly set in the client execution context.
`HttpClientBuilder` `setDefaultConnectionConfig(org.apache.hc.core5.http.config.ConnectionConfig config)` Assigns default `ConnectionConfig`.
`HttpClientBuilder` `setDefaultCookieSpecRegistry(org.apache.hc.core5.http.config.Lookup<CookieSpecProvider> cookieSpecRegistry)` Assigns default `CookieSpec` registry which will be used for request execution if not explicitly set in the client execution context.
`HttpClientBuilder` `setDefaultCookieStore(CookieStore cookieStore)` Assigns default `CookieStore` instance which will be used for request execution if not explicitly set in the client execution context.
`HttpClientBuilder` `setDefaultCredentialsProvider(CredentialsProvider credentialsProvider)` Assigns default `CredentialsProvider` instance which will be used for request execution if not explicitly set in the client execution context.
`HttpClientBuilder` `setDefaultHeaders(Collection<? extends org.apache.hc.core5.http.Header> defaultHeaders)` Assigns default request header values.
`HttpClientBuilder` `setDefaultRequestConfig(RequestConfig config)` Assigns default `RequestConfig` instance which will be used for request execution if not explicitly set in the client execution context.
`HttpClientBuilder` `setDefaultSocketConfig(org.apache.hc.core5.http.config.SocketConfig config)` Assigns default `SocketConfig`.
`HttpClientBuilder` `setHttpProcessor(org.apache.hc.core5.http.protocol.HttpProcessor httpprocessor)` Assigns `HttpProcessor` instance.
`HttpClientBuilder` `setKeepAliveStrategy(ConnectionKeepAliveStrategy keepAliveStrategy)` Assigns `ConnectionKeepAliveStrategy` instance.
`HttpClientBuilder` `setMaxConnPerRoute(int maxConnPerRoute)` Assigns maximum connection per route value.
`HttpClientBuilder` `setMaxConnTotal(int maxConnTotal)` Assigns maximum total connection value.
`HttpClientBuilder` `setProxy(org.apache.hc.core5.http.HttpHost proxy)` Assigns default proxy value.
`HttpClientBuilder` `setProxyAuthenticationStrategy(AuthenticationStrategy proxyAuthStrategy)` Assigns `AuthenticationStrategy` instance for proxy authentication.
`HttpClientBuilder` `setPublicSuffixMatcher(PublicSuffixMatcher publicSuffixMatcher)` Assigns file containing public suffix matcher.
`HttpClientBuilder` `setRedirectStrategy(RedirectStrategy redirectStrategy)` Assigns `RedirectStrategy` instance.
`HttpClientBuilder` `setRequestExecutor(org.apache.hc.core5.http.impl.io.HttpRequestExecutor requestExec)` Assigns `HttpRequestExecutor` instance.
`HttpClientBuilder` `setRetryHandler(HttpRequestRetryHandler retryHandler)` Assigns `HttpRequestRetryHandler` instance.
`HttpClientBuilder` `setRoutePlanner(HttpRoutePlanner routePlanner)` Assigns `HttpRoutePlanner` instance.
`HttpClientBuilder` `setSchemePortResolver(SchemePortResolver schemePortResolver)` Assigns `SchemePortResolver` instance.
`HttpClientBuilder` `setServiceUnavailableRetryStrategy(ServiceUnavailableRetryStrategy serviceUnavailStrategy)` Assigns `ServiceUnavailableRetryStrategy` instance.
`HttpClientBuilder` `setSSLContext(SSLContext sslContext)` Assigns `SSLContext` instance.
`HttpClientBuilder` `setSSLHostnameVerifier(HostnameVerifier hostnameVerifier)` Assigns `HostnameVerifier` instance.
`HttpClientBuilder` `setSSLSocketFactory(LayeredConnectionSocketFactory sslSocketFactory)` Assigns `LayeredConnectionSocketFactory` instance.
`HttpClientBuilder` `setTargetAuthenticationStrategy(AuthenticationStrategy targetAuthStrategy)` Assigns `AuthenticationStrategy` instance for target host authentication.
`HttpClientBuilder` `setUserAgent(String userAgent)` Assigns `User-Agent` value.
`HttpClientBuilder` `setUserTokenHandler(UserTokenHandler userTokenHandler)` Assigns `UserTokenHandler` instance.
`HttpClientBuilder` `useSystemProperties()` Use system properties when creating and configuring default implementations.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Constructor Detail

#### HttpClientBuilder

    protected HttpClientBuilder()

### Method Detail

#### create

    public static HttpClientBuilder create()

#### setRequestExecutor

    public final HttpClientBuilder setRequestExecutor(org.apache.hc.core5.http.impl.io.HttpRequestExecutor requestExec)

Assigns `HttpRequestExecutor` instance.

#### setSSLHostnameVerifier

    public final HttpClientBuilder setSSLHostnameVerifier(HostnameVerifier hostnameVerifier)

Assigns `HostnameVerifier` instance.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` and the `setSSLSocketFactory( org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory)` methods.

Since:
  4.4

#### setPublicSuffixMatcher

    public final HttpClientBuilder setPublicSuffixMatcher(PublicSuffixMatcher publicSuffixMatcher)

Assigns file containing public suffix matcher. Instances of this class can be created with `PublicSuffixMatcherLoader`.

Since:
  4.4
See Also:
  `PublicSuffixMatcher`, `PublicSuffixMatcherLoader`

#### setSSLContext

    public final HttpClientBuilder setSSLContext(SSLContext sslContext)

Assigns `SSLContext` instance.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` and the `setSSLSocketFactory( org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory)` methods.

#### setSSLSocketFactory

    public final HttpClientBuilder setSSLSocketFactory(LayeredConnectionSocketFactory sslSocketFactory)

Assigns `LayeredConnectionSocketFactory` instance.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` method.

#### setMaxConnTotal

    public final HttpClientBuilder setMaxConnTotal(int maxConnTotal)

Assigns maximum total connection value.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` method.

#### setMaxConnPerRoute

    public final HttpClientBuilder setMaxConnPerRoute(int maxConnPerRoute)

Assigns maximum connection per route value.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` method.

#### setDefaultSocketConfig

    public final HttpClientBuilder setDefaultSocketConfig(org.apache.hc.core5.http.config.SocketConfig config)

Assigns default `SocketConfig`.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` method.

#### setDefaultConnectionConfig

    public final HttpClientBuilder setDefaultConnectionConfig(org.apache.hc.core5.http.config.ConnectionConfig config)

Assigns default `ConnectionConfig`.

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` method.

#### setConnectionTimeToLive

    public final HttpClientBuilder setConnectionTimeToLive(long connTimeToLive,
                                            TimeUnit connTimeToLiveTimeUnit)

Sets maximum time to live for persistent connections

Please note this value can be overridden by the `setConnectionManager( HttpClientConnectionManager)` method.

Since:
  4.4

#### setConnectionManager

    public final HttpClientBuilder setConnectionManager(HttpClientConnectionManager connManager)

Assigns `HttpClientConnectionManager` instance.

#### setConnectionManagerShared

    public final HttpClientBuilder setConnectionManagerShared(boolean shared)

Defines the connection manager is to be shared by multiple client instances.

If the connection manager is shared its life-cycle is expected to be managed by the caller and it will not be shut down if the client is closed.

Parameters:
  `shared` - defines whether or not the connection manager can be shared by multiple clients.
Since:
  4.4

#### setConnectionReuseStrategy

    public final HttpClientBuilder setConnectionReuseStrategy(org.apache.hc.core5.http.ConnectionReuseStrategy reuseStrategy)

Assigns `ConnectionReuseStrategy` instance.

#### setKeepAliveStrategy

    public final HttpClientBuilder setKeepAliveStrategy(ConnectionKeepAliveStrategy keepAliveStrategy)

Assigns `ConnectionKeepAliveStrategy` instance.

#### setTargetAuthenticationStrategy

    public final HttpClientBuilder setTargetAuthenticationStrategy(AuthenticationStrategy targetAuthStrategy)

Assigns `AuthenticationStrategy` instance for target host authentication.

#### setProxyAuthenticationStrategy

    public final HttpClientBuilder setProxyAuthenticationStrategy(AuthenticationStrategy proxyAuthStrategy)

Assigns `AuthenticationStrategy` instance for proxy authentication.

#### setUserTokenHandler

    public final HttpClientBuilder setUserTokenHandler(UserTokenHandler userTokenHandler)

Assigns `UserTokenHandler` instance.

Please note this value can be overridden by the `disableConnectionState()` method.

#### disableConnectionState

    public final HttpClientBuilder disableConnectionState()

Disables connection state tracking.

#### setSchemePortResolver

    public final HttpClientBuilder setSchemePortResolver(SchemePortResolver schemePortResolver)

Assigns `SchemePortResolver` instance.

#### setUserAgent

    public final HttpClientBuilder setUserAgent(String userAgent)

Assigns `User-Agent` value.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### setDefaultHeaders

    public final HttpClientBuilder setDefaultHeaders(Collection<? extends org.apache.hc.core5.http.Header> defaultHeaders)

Assigns default request header values.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### addInterceptorFirst

    public final HttpClientBuilder addInterceptorFirst(org.apache.hc.core5.http.HttpResponseInterceptor itcp)

Adds this protocol interceptor to the head of the protocol processing list.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### addInterceptorLast

    public final HttpClientBuilder addInterceptorLast(org.apache.hc.core5.http.HttpResponseInterceptor itcp)

Adds this protocol interceptor to the tail of the protocol processing list.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### addInterceptorFirst

    public final HttpClientBuilder addInterceptorFirst(org.apache.hc.core5.http.HttpRequestInterceptor itcp)

Adds this protocol interceptor to the head of the protocol processing list.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### addInterceptorLast

    public final HttpClientBuilder addInterceptorLast(org.apache.hc.core5.http.HttpRequestInterceptor itcp)

Adds this protocol interceptor to the tail of the protocol processing list.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### disableCookieManagement

    public final HttpClientBuilder disableCookieManagement()

Disables state (cookie) management.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### disableContentCompression

    public final HttpClientBuilder disableContentCompression()

Disables automatic content decompression.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### disableAuthCaching

    public final HttpClientBuilder disableAuthCaching()

Disables authentication scheme caching.

Please note this value can be overridden by the `setHttpProcessor( org.apache.hc.core5.http.protocol.HttpProcessor)` method.

#### setHttpProcessor

    public final HttpClientBuilder setHttpProcessor(org.apache.hc.core5.http.protocol.HttpProcessor httpprocessor)

Assigns `HttpProcessor` instance.

#### setRetryHandler

    public final HttpClientBuilder setRetryHandler(HttpRequestRetryHandler retryHandler)

Assigns `HttpRequestRetryHandler` instance.

Please note this value can be overridden by the `disableAutomaticRetries()` method.

#### disableAutomaticRetries

    public final HttpClientBuilder disableAutomaticRetries()

Disables automatic request recovery and re-execution.

#### setProxy

    public final HttpClientBuilder setProxy(org.apache.hc.core5.http.HttpHost proxy)

Assigns default proxy value.

Please note this value can be overridden by the `setRoutePlanner( org.apache.hc.client5.http.routing.HttpRoutePlanner)` method.

#### setRoutePlanner

    public final HttpClientBuilder setRoutePlanner(HttpRoutePlanner routePlanner)

Assigns `HttpRoutePlanner` instance.

#### setRedirectStrategy

    public final HttpClientBuilder setRedirectStrategy(RedirectStrategy redirectStrategy)

Assigns `RedirectStrategy` instance.

Please note this value can be overridden by the `disableRedirectHandling()` method.

`

#### disableRedirectHandling

    public final HttpClientBuilder disableRedirectHandling()

Disables automatic redirect handling.

#### setConnectionBackoffStrategy

    public final HttpClientBuilder setConnectionBackoffStrategy(ConnectionBackoffStrategy connectionBackoffStrategy)

Assigns `ConnectionBackoffStrategy` instance.

#### setBackoffManager

    public final HttpClientBuilder setBackoffManager(BackoffManager backoffManager)

Assigns `BackoffManager` instance.

#### setServiceUnavailableRetryStrategy

    public final HttpClientBuilder setServiceUnavailableRetryStrategy(ServiceUnavailableRetryStrategy serviceUnavailStrategy)

Assigns `ServiceUnavailableRetryStrategy` instance.

#### setDefaultCookieStore

    public final HttpClientBuilder setDefaultCookieStore(CookieStore cookieStore)

Assigns default `CookieStore` instance which will be used for request execution if not explicitly set in the client execution context.

#### setDefaultCredentialsProvider

    public final HttpClientBuilder setDefaultCredentialsProvider(CredentialsProvider credentialsProvider)

Assigns default `CredentialsProvider` instance which will be used for request execution if not explicitly set in the client execution context.

#### setDefaultAuthSchemeRegistry

    public final HttpClientBuilder setDefaultAuthSchemeRegistry(org.apache.hc.core5.http.config.Lookup<AuthSchemeProvider> authSchemeRegistry)

Assigns default `AuthScheme` registry which will be used for request execution if not explicitly set in the client execution context.

#### setDefaultCookieSpecRegistry

    public final HttpClientBuilder setDefaultCookieSpecRegistry(org.apache.hc.core5.http.config.Lookup<CookieSpecProvider> cookieSpecRegistry)

Assigns default `CookieSpec` registry which will be used for request execution if not explicitly set in the client execution context.

See Also:
  `CookieSpecRegistries`

#### setContentDecoderRegistry

    public final HttpClientBuilder setContentDecoderRegistry(Map<String,InputStreamFactory> contentDecoderMap)

Assigns a map of `InputStreamFactory`s to be used for automatic content decompression.

#### setDefaultRequestConfig

    public final HttpClientBuilder setDefaultRequestConfig(RequestConfig config)

Assigns default `RequestConfig` instance which will be used for request execution if not explicitly set in the client execution context.

#### useSystemProperties

    public final HttpClientBuilder useSystemProperties()

Use system properties when creating and configuring default implementations.

#### evictExpiredConnections

    public final HttpClientBuilder evictExpiredConnections()

Makes this instance of HttpClient proactively evict expired connections from the connection pool using a background thread.

One MUST explicitly close HttpClient with `Closeable.close()` in order to stop and release the background thread.

Please note this method has no effect if the instance of HttpClient is configuted to use a shared connection manager.

Please note this method may not be used when the instance of HttpClient is created inside an EJB container.

Since:
  4.4
See Also:
  `setConnectionManagerShared(boolean)`, `HttpClientConnectionManager.closeExpiredConnections()`

#### evictIdleConnections

    public final HttpClientBuilder evictIdleConnections(long maxIdleTime,
                                         TimeUnit maxIdleTimeUnit)

Makes this instance of HttpClient proactively evict idle connections from the connection pool using a background thread.

One MUST explicitly close HttpClient with `Closeable.close()` in order to stop and release the background thread.

Please note this method has no effect if the instance of HttpClient is configuted to use a shared connection manager.

Please note this method may not be used when the instance of HttpClient is created inside an EJB container.

Parameters:
  `maxIdleTime` - maximum time persistent connections can stay idle while kept alive in the connection pool. Connections whose inactivity period exceeds this value will get closed and evicted from the pool.
  `maxIdleTimeUnit` - time unit for the above parameter.
Since:
  4.4
See Also:
  `setConnectionManagerShared(boolean)`, `HttpClientConnectionManager.closeExpiredConnections()`

#### createMainExec

    protected ClientExecChain createMainExec(org.apache.hc.core5.http.impl.io.HttpRequestExecutor requestExec,
                                 HttpClientConnectionManager connManager,
                                 org.apache.hc.core5.http.ConnectionReuseStrategy reuseStrategy,
                                 ConnectionKeepAliveStrategy keepAliveStrategy,
                                 org.apache.hc.core5.http.protocol.HttpProcessor proxyHttpProcessor,
                                 AuthenticationStrategy targetAuthStrategy,
                                 AuthenticationStrategy proxyAuthStrategy,
                                 UserTokenHandler userTokenHandler)

Produces an instance of `ClientExecChain` to be used as a main exec.

Default implementation produces an instance of `MainClientExec`

For internal use.

Since:
  4.4

#### decorateMainExec

    protected ClientExecChain decorateMainExec(ClientExecChain mainExec)

For internal use.

#### decorateProtocolExec

    protected ClientExecChain decorateProtocolExec(ClientExecChain protocolExec)

For internal use.

#### addCloseable

    protected void addCloseable(Closeable closeable)

For internal use.

#### build

    public CloseableHttpClient build()