What is the difference between CloseableHttpClient and HttpClient in Apache HttpClient API?

apache, apache-httpclient-4.x, http, java

Solution

- The main entry point of the HttpClient API is the HttpClient interface.

- The most essential function of HttpClient is to execute HTTP methods.

- Execution of an HTTP method involves one or several HTTP request / HTTP response exchanges, usually handled internally by HttpClient.

- CloseableHttpClient is an abstract class which is the base implementation of HttpClient that also implements java.io.Closeable.

Here is an example of request execution process in its simplest form:

CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet("http://localhost/");
CloseableHttpResponse response = httpclient.execute(httpget);
try {
    //do something
} finally {
    response.close();
}

HttpClient resource deallocation: When an instance CloseableHttpClient is no longer needed and is about to go out of scope the connection manager associated with it must be shut down by calling the CloseableHttpClient#close() method.

CloseableHttpClient httpclient = HttpClients.createDefault();
try {
    //do something
} finally {
    httpclient.close();
}

see the Reference to learn fundamentals.

@Scadge Since Java 7, Use of try-with-resources statement ensures that each resource is closed at the end of the statement. It can be used both for the client and for each response

try(CloseableHttpClient httpclient = HttpClients.createDefault()){

    // e.g. do this many times
    try (CloseableHttpResponse response = httpclient.execute(httpget)) {
    //do something
    }

    //do something else with httpclient here
}

Problem

I'm studying an application developed by our company. It uses the Apache HttpClient library. In the source code it uses the `HttpClient` class to create instances to connect to a server. I want to learn about Apache HttpClient and I've gone trough this set of examples. All the examples use `CloseableHttpClient` instead of `HttpClient`. So I think `CloseableHttpClient` is an extended version of `HttpClient`. If this is the case I have two questions: - What is the difference between these two? - Which class is recommended to use for my new development?

Original source

Related problems