HttpClient in Java

In Java 11, HttpClient was introduced as part of the java.net.http package, providing a modern, fully asynchronous, and flexible HTTP client API to replace the older HttpURLConnection. It supports HTTP/1.1, HTTP/2, synchronous and asynchronous requests, and built-in support for handling JSON, time-outs, redirects, and authentication.

Here’s a detailed overview and examples:


1. Creating an HttpClient

import java.net.http.HttpClient;
import java.time.Duration;

HttpClient client = HttpClient.newBuilder()
        .version(HttpClient.Version.HTTP_2)      // Use HTTP/2
        .connectTimeout(Duration.ofSeconds(10))  // Connection timeout
        .build();

2. Sending a Synchronous GET Request

import java.net.URI;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
        .GET()
        .build();

try {
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println("Status code: " + response.statusCode());
    System.out.println("Response body: " + response.body());
} catch (Exception e) {
    e.printStackTrace();
}

3. Sending a POST Request

String json = """
    {
        "title": "foo",
        "body": "bar",
        "userId": 1
    }
""";

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://jsonplaceholder.typicode.com/posts"))
        .header("Content-Type", "application/json")
        .POST(HttpRequest.BodyPublishers.ofString(json))
        .build();

try {
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println("Status code: " + response.statusCode());
    System.out.println("Response body: " + response.body());
} catch (Exception e) {
    e.printStackTrace();
}

4. Asynchronous Request (Non-blocking)

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://jsonplaceholder.typicode.com/posts/1"))
        .GET()
        .build();

client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
      .thenApply(HttpResponse::body)
      .thenAccept(System.out::println)
      .join();  // Wait for completion

5. Common Features

  • Timeouts: .timeout(Duration.ofSeconds(5))
  • Redirects: .followRedirects(HttpClient.Redirect.ALWAYS)
  • HTTP Versions: .version(HttpClient.Version.HTTP_2) or HTTP/1.1
  • Custom Headers: .header("Authorization", "Bearer token")
  • Cookies: HttpClient can manage cookies via CookieHandler.

HttpClient in Java 11 is a big improvement over HttpURLConnection, especially for modern APIs and asynchronous programming.

Leave a Reply