SoFunction
Updated on 2025-04-13

Detailed explanation of the usage example of Apache HttpClient

1. Apache HttpClient Basic Edition

HttpClientsIs a tool class in the Apache HttpClient library for creating and managing HTTP client instances. Apache HttpClient is a powerful Java HTTP client library for sending HTTP requests and processing HTTP responses.HttpClientsThere are several ways to create and configure HTTP client instances.

The following is aboutHttpClientsDetailed explanation:

1. Introduction to Apache HttpClient

Apache HttpClient is an open source Java HTTP client library that supports HTTP/1.1 and HTTP/2 protocols. It provides a wealth of features such as:

  • Send HTTP requests such as GET, POST, PUT, DELETE, etc.
  • The headers, status codes, entities, etc. that handle HTTP requests and responses.
  • Supports advanced functions such as connection pooling, retry mechanism, proxy, SSL/TLS, etc.

2. The role of the HttpClients class

HttpClientsis a factory class used to createCloseableHttpClientExample.CloseableHttpClientIt is the main interface of the HTTP client and is used to perform HTTP requests.

HttpClientsVarious static methods are provided to create and configure HTTP client instances, such as:

  • Create the default HTTP client.
  • Create a custom configuration HTTP client.
  • Create an HTTP client that supports connection pooling.

3. Common methods of HttpClients

(1) ()

  • Function: Create a default HTTP client instance.
  • Features
    • Use default configurations (such as connection pooling, retry mechanism, etc.).
    • Suitable for most simple HTTP request scenarios.
  • Example
CloseableHttpClient httpClient = ();

(2) ()

  • Function: Create an HTTP client instance based on system properties.
  • Features
    • Use system properties (such as proxy settings, timeout time, etc.) to configure the client.
    • Suitable for scenarios that require integration with system configuration.
  • Example:
CloseableHttpClient httpClient = ();

(3) ()

  • Function: Return oneHttpClientBuilderObject for custom configuration of HTTP clients.
  • Features
    • You can set advanced configurations such as connection pooling, timeout, proxy, SSL/TLS, etc.
    • Suitable for scenarios that require fine control.
  • Example
 CloseableHttpClient httpClient = ()
     .setMaxConnTotal(100) // Maximum number of connections     .setMaxConnPerRoute(10) // Maximum number of connections per route     .build();

4. Examples of using HttpClients

Here is a complete example showing how to use itHttpClientsSend an HTTP GET request and process the response:

 import ;
 import ;
 import ;
 import ;
 import ;
 ​
 public class HttpClientExample {
     public static void main(String[] args) {
         // 1. Create an HTTP client         try (CloseableHttpClient httpClient = ()) {
             // 2. Create an HTTP GET request             HttpGet request = new HttpGet("/posts/1");
 ​
             // 3. Send a request and get a response             try (CloseableHttpResponse response = (request)) {
                 // 4. Check the response status code                 int statusCode = ().getStatusCode();
                 ("Status Code: " + statusCode);
 ​
                 // 5. Get the response content                 String responseBody = (());
                 ("Response Body: " + responseBody);
             }
         } catch (Exception e) {
             ();
         }
     }
 }

5. Advanced configuration of HttpClients

pass()Method, you can customize the configuration of the HTTP client. Here are some common configuration options:

(1) Connection pool configuration

 CloseableHttpClient httpClient = ()
     .setMaxConnTotal(100) // Maximum number of connections     .setMaxConnPerRoute(10) // Maximum number of connections per route     .build();

(2) Timeout configuration

 RequestConfig requestConfig = ()
     .setConnectTimeout(5000) // Connection timeout     .setSocketTimeout(5000) // Read timeout     .build();
 ​
 CloseableHttpClient httpClient = ()
     .setDefaultRequestConfig(requestConfig)
     .build();

(3) Agent configuration

 HttpHost proxy = new HttpHost("", 8080);
 ​
 CloseableHttpClient httpClient = ()
     .setProxy(proxy)
     .build();

(4) SSL/TLS configuration

 SSLContext sslContext = ()
     .loadTrustMaterial((chain, authType) -> true) // Trust all certificates     .build();
 ​
 CloseableHttpClient httpClient = ()
     .setSSLContext(sslContext)
     .build();

6. Things to note

Resource releaseCloseableHttpClientandCloseableHttpResponseAll have been achievedCloseableThe interface needs to be closed after use to free resources.

Thread safetyCloseableHttpClientIt is thread-safe and can be shared in a multi-threaded environment.

Performance optimization: Using connection pools and reasonable timeout configuration can significantly improve performance.

7. Summary

  • HttpClientsIs a tool class in the Apache HttpClient library for creating and managing HTTP client instances.
  • It provides multiple ways to create a default or custom configuration HTTP client.
  • pass()Methods can implement advanced configurations such as connection pooling, timeout, proxy, SSL/TLS.
  • Using Apache HttpClient allows you to easily send HTTP requests and process responses, and is a powerful tool in Java for handling HTTP requests.

2. Apache HttpClient Advanced Edition

1. Overview of HttpClients Class

HttpClientsis a factory class in the Apache HttpClient library for creation and configurationCloseableHttpClientExample. It is the entry point for building HTTP clients and supports highly customized HTTP request processing, including connection pool management, SSL/TLS configuration, retry mechanism, etc.

2. Core methods and configuration

2.1 Create a default client

CloseableHttpClient httpClient = ();

Features

  • Use the default configuration (connection pool, request retry, etc.).
  • Suitable for simple scenarios, but limited scalability.

2.2 Customize the configuration client

pass()returnHttpClientBuilder, allowing for fine configuration:

 CloseableHttpClient httpClient = ()
     .setConnectionManager(connectionManager)  // Connection pool management     .setDefaultRequestConfig(requestConfig)   // Request timeout configuration     .setRetryHandler(retryHandler)            // Request a retry policy     .setProxy(proxy)                          // Agent settings     .setSSLContext(sslContext)                // SSL/TLS configuration     .build();

3. Detailed explanation of advanced configuration

3.1 Connection pool management

Connection pooling is a key component to improve performance and avoid frequent creation and destruction of connections.

 PoolingHttpClientConnectionManager connectionManager = 
     new PoolingHttpClientConnectionManager();
 (200);          // Maximum total number of connections (20); // Maximum number of connections per route (target host) ​
 CloseableHttpClient httpClient = ()
     .setConnectionManager(connectionManager)
     .build();

3.2 Timeout configuration

 RequestConfig requestConfig = ()
     .setConnectTimeout(5000)    // Connection establishment timeout (milliseconds)     .setSocketTimeout(10000)     // Data transmission timeout time (milliseconds)     .setConnectionRequestTimeout(2000) // Get the connection timeout from the connection pool     .build();
 ​
 CloseableHttpClient httpClient = ()
     .setDefaultRequestConfig(requestConfig)
     .build();

3.3 Retry mechanism

Automatically retry failed requests (such as network fluctuations that cause failure):

 HttpRequestRetryHandler retryHandler = (exception, executionCount, context) -> {
     if (executionCount >= 3) return false; // Maximum number of retry     if (exception instanceof NoHttpResponseException) return true; // Retry when there is no response     return false;
 };
 ​
 CloseableHttpClient httpClient = ()
     .setRetryHandler(retryHandler)
     .build();

3.4 Agent Configuration

 HttpHost proxy = new HttpHost("", 8080);
 CloseableHttpClient httpClient = ()
     .setProxy(proxy)
     .build();

3.5 SSL/TLS configuration

Trust all certificates (test environment only):

 SSLContext sslContext = ()
     .loadTrustMaterial((chain, authType) -> true) // Trust all certificates     .build();
 ​
 CloseableHttpClient httpClient = ()
     .setSSLContext(sslContext)
     .setSSLHostnameVerifier() // Skip hostname verification     .build();

3.6 Authentication mechanism

Use Basic authentication:

 CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
 (
     new AuthScope("", 80),
     new UsernamePasswordCredentials("user", "pass")
 );
 ​
 CloseableHttpClient httpClient = ()
     .setDefaultCredentialsProvider(credentialsProvider)
     .build();

4. Request and response processing

4.1 Send a GET request

 HttpGet httpGet = new HttpGet("/data");
 try (CloseableHttpResponse response = (httpGet)) {
     int statusCode = ().getStatusCode();
     HttpEntity entity = ();
     String content = (entity);
     (entity); // Ensure resource release }

4.2 Send POST request (JSON data)

 HttpPost httpPost = new HttpPost("/create");
 StringEntity jsonEntity = new StringEntity("{\"key\":\"value\"}", ContentType.APPLICATION_JSON);
 (jsonEntity);
 ​
 try (CloseableHttpResponse response = (httpPost)) {
     // Process the response... }

4.3 File Upload (Multipart)

 HttpPost httpPost = new HttpPost("/upload");
 FileBody fileBody = new FileBody(new File("path/to/file"));
 MultipartEntityBuilder builder = ()
     .addPart("file", fileBody)
     .addTextBody("comment", "File upload");
 (());

5. Advanced features

5.1 Asynchronous Request

useHttpAsyncClientsImplement asynchronous non-blocking requests:

 CloseableHttpAsyncClient asyncClient = ().build();
 ();
 ​
 SimpleHttpRequest request = ("/data");
 Future<SimpleHttpResponse> future = (request, new FutureCallback<>() {
     @Override
     public void completed(SimpleHttpResponse response) {
         ("Response: " + ());
     }
 ​
     @Override
     public void failed(Exception ex) {
         ();
     }
 ​
     @Override
     public void cancelled() {
         ("Request cancelled");
     }
 });

5.2 Request Interceptor

Add custom logic (such as logging, modifying request headers):

 CloseableHttpClient httpClient = ()
     .addInterceptorFirst((HttpRequestInterceptor) (request, context) -> {
         ("X-Custom-Header", "value");
         ("Request URI: " + ().getUri());
     })
     .build();

5.3 Cookie Management

Automatically manage cookies:

 CookieStore cookieStore = new BasicCookieStore();
 CloseableHttpClient httpClient = ()
     .setDefaultCookieStore(cookieStore)
     .build();

6. Best Practices and FAQs

6.1 Resource Release

Make sure to closeCloseableHttpClientandCloseableHttpResponse

 try (CloseableHttpClient httpClient = ()) {
     try (CloseableHttpResponse response = (request)) {
         // Process the response...     }
 }

6.2 Performance Tuning

  • Connection pool parameters: Adjust according to concurrent needsMaxTotalandDefaultMaxPerRoute
  • Timeout setting: Avoid thread blocking due to network problems.
  • Reuse the connection: ReuseHttpClientInstances are created rather than frequent.

6.3 Error handling

  • Retry the policy: Automatically retry for recoverable errors (such as timeout).
  • Exception capture:deal withIOExceptionClientProtocolExceptionwait.

6.4 Security

  • Disable trust all certificates in production environment: Use a valid CA signature certificate.
  • Sensitive information protection: Avoid printing sensitive data in request headers or response bodies in logs.

7. Typical application scenarios

  • Inter-microservice communication: Call other services through HTTP in distributed systems.
  • API Integration: Calling third-party RESTful APIs (such as payment gateways, map services).
  • Crawler development: Crawl the content of the web page and parse the data.
  • File transfer: Upload/download files to remote server.
  • Test automation: Simulates the HTTP request verification interface function of the client sending HTTP requests.

8. Official documents and resources

Apache HttpClient official documentationApache HttpComponents – HttpClient Overview

GitHub repository/apache/httpcomponents-client

This is the end of this article about the use of Apache HttpClient. For more information about using Apache HttpClient, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!