org.springframework.http.client

## Class HttpComponentsClientHttpRequestFactory

- java.lang.Object
- - org.springframework.http.client.HttpComponentsClientHttpRequestFactory

All Implemented Interfaces:
  DisposableBean, ClientHttpRequestFactory

    public class HttpComponentsClientHttpRequestFactory
    extends Object
    implements ClientHttpRequestFactory, DisposableBean

`ClientHttpRequestFactory` implementation that uses Apache HttpComponents HttpClient to create requests.

Allows to use a pre-configured `HttpClient` instance - potentially with authentication, HTTP connection pooling, etc.

Since:
  3.1
Author:
  Oleg Kalnichevski, Arjen Poutsma

### Constructor Summary

Constructors
Constructor and Description
`HttpComponentsClientHttpRequestFactory()` Create a new instance of the HttpComponentsClientHttpRequestFactory with a default `HttpClient` that uses a default `PoolingClientConnectionManager`.
`HttpComponentsClientHttpRequestFactory(org.apache.http.client.HttpClient httpClient)` Create a new instance of the HttpComponentsClientHttpRequestFactory with the given `HttpClient` instance.

### Method Summary

Methods
`protected org.apache.http.protocol.HttpContext` `createHttpContext(HttpMethod httpMethod, URI uri)` Template methods that creates a `HttpContext` for the given HTTP method and URI.
`protected org.apache.http.client.methods.HttpUriRequest` `createHttpUriRequest(HttpMethod httpMethod, URI uri)` Create a Commons HttpMethodBase object for the given HTTP method and URI specification.
`ClientHttpRequest` `createRequest(URI uri, HttpMethod httpMethod)` Create a new `ClientHttpRequest` for the specified URI and HTTP method.
`void` `destroy()` Shutdown hook that closes the underlying `ClientConnectionManager`'s connection pool, if any.
`org.apache.http.client.HttpClient` `getHttpClient()` Return the `HttpClient` used by this factory.
`protected void` `postProcessHttpRequest(org.apache.http.client.methods.HttpUriRequest request)` Template method that allows for manipulating the `HttpUriRequest` before it is returned as part of a `HttpComponentsClientHttpRequest`.
`void` `setConnectTimeout(int timeout)` Set the connection timeout for the underlying HttpClient.
`void` `setHttpClient(org.apache.http.client.HttpClient httpClient)` Set the `HttpClient` used by this factory.
`void` `setReadTimeout(int timeout)` Set the socket read timeout for the underlying HttpClient.

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

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

### Constructor Detail

#### HttpComponentsClientHttpRequestFactory

    public HttpComponentsClientHttpRequestFactory()

Create a new instance of the HttpComponentsClientHttpRequestFactory with a default `HttpClient` that uses a default `PoolingClientConnectionManager`.

#### HttpComponentsClientHttpRequestFactory

    public HttpComponentsClientHttpRequestFactory(org.apache.http.client.HttpClient httpClient)

Create a new instance of the HttpComponentsClientHttpRequestFactory with the given `HttpClient` instance.

Parameters:
  `httpClient` - the HttpClient instance to use for this request factory

### Method Detail

#### setHttpClient

    public void setHttpClient(org.apache.http.client.HttpClient httpClient)

Set the `HttpClient` used by this factory.

#### getHttpClient

    public org.apache.http.client.HttpClient getHttpClient()

Return the `HttpClient` used by this factory.

#### setConnectTimeout

    public void setConnectTimeout(int timeout)

Set the connection timeout for the underlying HttpClient. A timeout value of 0 specifies an infinite timeout.

Parameters:
  `timeout` - the timeout value in milliseconds

#### setReadTimeout

    public void setReadTimeout(int timeout)

Set the socket read timeout for the underlying HttpClient. A timeout value of 0 specifies an infinite timeout.

Parameters:
  `timeout` - the timeout value in milliseconds

#### createRequest

    public ClientHttpRequest createRequest(URI uri,
                                  HttpMethod httpMethod)
                                    throws IOException

Description copied from interface: `ClientHttpRequestFactory`
Create a new `ClientHttpRequest` for the specified URI and HTTP method.

The returned request can be written to, and then executed by calling `ClientHttpRequest.execute()`.

Specified by:
  `createRequest` in interface `ClientHttpRequestFactory`
Parameters:
  `uri` - the URI to create a request for
  `httpMethod` - the HTTP method to execute
Returns:
  the created request
Throws:
  `IOException` - in case of I/O errors

#### createHttpUriRequest

    protected org.apache.http.client.methods.HttpUriRequest createHttpUriRequest(HttpMethod httpMethod,
                                                                     URI uri)

Create a Commons HttpMethodBase object for the given HTTP method and URI specification.

Parameters:
  `httpMethod` - the HTTP method
  `uri` - the URI
Returns:
  the Commons HttpMethodBase object

#### postProcessHttpRequest

    protected void postProcessHttpRequest(org.apache.http.client.methods.HttpUriRequest request)

Template method that allows for manipulating the `HttpUriRequest` before it is returned as part of a `HttpComponentsClientHttpRequest`.

The default implementation is empty.

Parameters:
  `request` - the request to process

#### createHttpContext

    protected org.apache.http.protocol.HttpContext createHttpContext(HttpMethod httpMethod,
                                                         URI uri)

Template methods that creates a `HttpContext` for the given HTTP method and URI.

The default implementation returns `null`.

Parameters:
  `httpMethod` - the HTTP method
  `uri` - the URI
Returns:
  the http context

#### destroy

    public void destroy()

Shutdown hook that closes the underlying `ClientConnectionManager`'s connection pool, if any.

Specified by:
  `destroy` in interface `DisposableBean`