How do I use Java 11 HttpClient with basic authentication?

Using Java 11’s HttpClient with Basic Authentication is straightforward. Below is an example of how to configure and send an HTTP request using Basic Authentication:

Steps:

  1. Encode the Username and Password: Basic Authentication requires the credentials (username and password) to be Base64 encoded in the format username:password.
  2. Set the Authorization Header: Attach the Base64 encoded value as an Authorization header in the request.
  3. Use HttpClient to Send the Request: Use HttpClient to send the request to the desired endpoint.

Here’s an example implementation:

Example Code

package org.kodejava.net.http;

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;

public class HttpClientWithBasicAuth {
   public static void main(String[] args) throws Exception {
      // Define the username and password
      String username = "username";
      String password = "password";

      // Encode the credentials in Base64 format
      String auth = username + ":" + password;
      String encodedAuth = Base64.getEncoder().encodeToString(auth.getBytes());
      String authHeader = "Basic " + encodedAuth;

      // Create the HttpClient
      HttpClient client = HttpClient.newBuilder()
              .version(HttpClient.Version.HTTP_2)
              .build();

      // Create the HttpRequest with the Authorization header
      HttpRequest request = HttpRequest.newBuilder()
              .uri(URI.create("https://example.com/api/resource")) // Replace with your endpoint
              .header("Authorization", authHeader)
              .header("Content-Type", "application/json") // Optional, adjust if needed
              .GET() // Use POST, PUT, or DELETE if required
              .build();

      // Send the request and get the response
      HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

      // Print the response details
      System.out.println("Status Code: " + response.statusCode());
      System.out.println("Response Body: " + response.body());
   }
}

Explanation

  1. Base64 Encoding:
    • Concatenate the username and password using : as the separator.
    • Encode the concatenated string in Base64 format.
  2. Authorization Header:
    • The Authorization header must include Basic followed by the Base64-encoded credentials.
  3. HttpClient Configuration:
    • Use HttpClient.newBuilder() to configure HttpClient.
    • You can set the HTTP version with .version(HttpClient.Version.HTTP_2).
  4. HttpRequest Building:
    • Use HttpRequest.newBuilder() to construct the request.
    • Attach the Authorization header to the HTTP request.
    • Specify the HTTP method (GET, POST, etc.).
  5. Response Handling:
    • Use HttpResponse.BodyHandlers.ofString() to handle the response body as a String.

Output

If the credentials are correct, the HTTP server will process the request and return the desired response. Otherwise, the server will return HTTP 401 Unauthorized.

Notes:

  • Replace `https://example.com/api/resource` with your actual endpoint.
  • Ensure that the username and password are handled securely and are not hardcoded in production. Use secure configurations or credential storage mechanisms instead.
  • Adjust the other headers (e.g., Content-Type) based on your API’s requirements.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.