Implementing HTTP Requests with Apache HttpClient in Java

Project Dependencies

To utilize Apache HttpClient in your Java project, include the following Maven dependency:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

Basic HTTP Request Implementation

Here's a comprehensive example demonstrating both GET and POST request handling:

public String fetchContentFromEndpoint(String endpointUrl, String httpMethod) {
    String responseData = "";
    
    // Configure timeout settings
    // connectionRequestTimeout: Time to retrieve connection from pool
    // connectTimeout: Time to establish TCP connection
    // socketTimeout: Maximum time between received data packets
    RequestConfig configuration = RequestConfig.custom()
            .setConnectTimeout(60000)
            .setConnectionRequestTimeout(60000)
            .setSocketTimeout(60000)
            .build();
            
    CloseableHttpClient webClient = HttpClients.createDefault();
    CloseableHttpResponse serverResponse = null;
    
    try {
        HttpRequestBase httpRequest;
        
        if ("get".equalsIgnoreCase(httpMethod)) {
            httpRequest = new HttpGet(endpointUrl);
            httpRequest.setHeader("User-Agent", 
                "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
        } else {
            HttpPost postRequest = new HttpPost(endpointUrl);
            
            // Parse URL parameters for POST request
            if (endpointUrl.contains("?")) {
                List<NameValuePair> formParams = parseUrlParameters(endpointUrl);
                postRequest.setEntity(new UrlEncodedFormEntity(formParams, Consts.UTF_8));
                endpointUrl = endpointUrl.split("\\?")[0];
            }
            httpRequest = postRequest;
        }
        
        httpRequest.setConfig(configuration);
        serverResponse = webClient.execute(httpRequest);
        
        int statusCode = serverResponse.getStatusLine().getStatusCode();
        if (statusCode == HttpStatus.SC_OK) {
            HttpEntity responseEntity = serverResponse.getEntity();
            if (responseEntity != null) {
                responseData = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
        Logger.error("Request processing failed", ex);
    } finally {
        closeResourcesQuietly(serverResponse);
    }
    
    return responseData;
}

private List<NameValuePair> parseUrlParameters(String url) {
    List<NameValuePair> parameters = new ArrayList<>();
    String queryString = url.substring(url.indexOf("?") + 1);
    String[] paramPairs = queryString.split("&");
    
    for (String pair : paramPairs) {
        String[] keyValue = pair.split("=");
        if (keyValue.length == 2) {
            parameters.add(new BasicNameValuePair(keyValue[0], keyValue[1]));
        }
    }
    return parameters;
}

private void closeResourcesQuietly(CloseableHttpResponse response) {
    if (response != null) {
        try {
            response.close();
        } catch (IOException e) {
            Logger.error("Failed to close HTTP response", e);
        }
    }
}

Tracking Redirect URLs

To capture the final destiantion URL after server redirects:

public String traceRedirectUrl(String sourceUrl) {
    String destinationUrl = null;
    
    RequestConfig settings = RequestConfig.custom()
            .setConnectTimeout(60000)
            .setConnectionRequestTimeout(60000)
            .setSocketTimeout(60000)
            .setRedirectsEnabled(true)
            .build();
            
    CloseableHttpClient httpClient = HttpClients.createDefault();
    HttpClientContext executionContext = HttpClientContext.create();
    
    try {
        HttpGet request = new HttpGet(sourceUrl);
        request.setConfig(settings);
        
        // Set required headers
        request.setHeader("User-Agent", 
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
        request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        
        CloseableHttpResponse response = httpClient.execute(request, executionContext);
        
        // Extract redirect information
        HttpHost targetHost = executionContext.getTargetHost();
        List<URI> redirectChain = executionContext.getRedirectLocations();
        
        if (redirectChain != null && !redirectChain.isEmpty()) {
            URI finalLocation = URIUtils.resolve(request.getURI(), targetHost, redirectChain);
            destinationUrl = finalLocation.toString();
            
            // Clean session ID if present
            if (destinationUrl.contains(";jsessionid")) {
                destinationUrl = destinationUrl.split(";")[0];
            }
        }
        
        System.out.println("Final destination: " + destinationUrl);
        
    } catch (Exception e) {
        Logger.error("Redirect tracking failed", e);
    } finally {
        try {
            httpClient.close();
        } catch (IOException e) {
            Logger.error("Client cleanup error", e);
        }
    }
    
    return destinationUrl;
}

Tags: HttpClient java HTTP apache WebRequests

Posted on Fri, 10 Jul 2026 16:04:30 +0000 by franknu