🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.
▶️ Subscribe to My YouTube Channel (178K+ subscribers): Java Guides on YouTube
▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube
Introduction
Apache HttpClient is a robust library for handling HTTP requests in Java. It provides support for different HTTP methods, including GET, POST, PUT, DELETE, and more. In this tutorial, we will focus on making a POST HTTP request using Apache HttpClient. POST requests are commonly used to send data to a server to create or update a resource. We will demonstrate how to send a POST request with JSON data and handle the response.
Maven Dependencies
To use Apache HttpClient, you need to add the following dependency to your pom.xml file:
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5 -->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>
Example Scenario
We will create a simple Java class that sends a POST request to a specified URL with JSON data and prints the response.
JSONPlaceholder API
We will use the JSONPlaceholder API for this example. The JSONPlaceholder API provides fake online RESTful endpoints for testing and prototyping. The URL for the POST endpoint is:
https://jsonplaceholder.typicode.com/posts
Java Class for Sending POST Request
Create a class named HttpClientPostExample with the following code:
import org.apache.hc.client5.http.classic.methods.HttpPost;
import org.apache.hc.client5.http.classic.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.io.entity.StringEntity;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.io.entity.EntityUtils;
public class HttpClientPostExample {
    public static void main(String[] args) {
        String url = "https://jsonplaceholder.typicode.com/posts";
        String json = "{\"title\":\"foo\",\"body\":\"bar\",\"userId\":1}";
        // Create HttpClient
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            
            // Create HttpPost request
            HttpPost request = new HttpPost(url);
            
            // Set JSON payload
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            request.setEntity(entity);
            
            // Set headers
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");
            
            // Execute the request
            try (CloseableHttpResponse response = httpClient.execute(request)) {
                
                // Get HttpResponse Status
                System.out.println("Response Code: " + response.getCode());
                
                // Get HttpResponse Content
                String content = EntityUtils.toString(response.getEntity());
                System.out.println("Response Content: \n" + content);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Explanation
- Adding Maven Dependencies: - The org.apache.httpcomponents.client5:httpclient5dependency provides the classes needed to create and execute HTTP requests using Apache HttpClient.
 
- The 
- Creating HttpClient: - CloseableHttpClient httpClient = HttpClients.createDefault();creates an instance of- CloseableHttpClientusing the default configuration.
 
- Creating HttpPost Request: - HttpPost request = new HttpPost(url);creates an- HttpPostrequest for the specified URL.
 
- Setting JSON Payload: - StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);creates a- StringEntitywith the JSON data and sets the content type to- application/json.
- request.setEntity(entity);sets the entity (payload) for the POST request.
 
- Setting Headers: - request.setHeader("Accept", "application/json");sets the- Acceptheader to- application/json.
- request.setHeader("Content-type", "application/json");sets the- Content-typeheader to- application/json.
 
- Executing the Request: - try (CloseableHttpResponse response = httpClient.execute(request)) { ... }executes the POST request and retrieves the response.
 
- Getting HttpResponse Status: - System.out.println("Response Code: " + response.getCode());prints the status code of the HTTP response.
 
- Getting HttpResponse Content: - String content = EntityUtils.toString(response.getEntity());converts the response entity to a string and prints the content.
 
Running the Example
To run the example, simply execute the HttpClientPostExample class. You should see the status code and the content of the response printed in the console.
Example Output
Response Code: 201
Response Content: 
{
  "title": "foo",
  "body": "bar",
  "userId": 1,
  "id": 101
}
Additional Configuration
Setting Custom Headers
You can set custom headers for the POST request by using the setHeader method on the HttpPost object.
request.setHeader("User-Agent", "Mozilla/5.0");
Handling Redirects
By default, Apache HttpClient handles redirects automatically. You can customize this behavior by using a custom HttpClientBuilder.
CloseableHttpClient httpClient = HttpClients.custom()
    .setRedirectStrategy(new DefaultRedirectStrategy() {
        @Override
        protected boolean isRedirectable(String method) {
            return true;
        }
    })
    .build();
Setting Timeouts
You can set connection and socket timeouts by using RequestConfig.
RequestConfig requestConfig = RequestConfig.custom()
    .setConnectTimeout(5000)
    .setSocketTimeout(5000)
    .build();
HttpPost request = new HttpPost(url);
request.setConfig(requestConfig);
Conclusion
Using Apache HttpClient to make a POST HTTP request is straightforward and flexible. By following this tutorial, you should now be able to create and execute POST requests, handle responses, and customize various aspects of the HTTP request and response process. Apache HttpClient provides a comprehensive set of features that make it an excellent choice for handling HTTP operations in Java applications. The JSONPlaceholder API serves as a practical and convenient source for testing and prototyping your HTTP requests.
 
 
 
![[NEW] Full-Stack Java Development with Spring Boot 3 & React Build 5 Spring Boot Projects with Java: Line-by-Line Coding](https://img-c.udemycdn.com/course/750x422/5338984_4d3a_5.jpg) 
 
 
 
 
 
 
 
 
 
 
Comments
Post a Comment
Leave Comment