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;
}