1. Overview
This cookbook shows how to use the Apache HttpClient in a variety of examples and use-cases.
We will demonstrate examples for both 5.x & 4.5 Version.
The format of the cookbook is example focused and practical – no extraneous details and explanations necessary.
If you want to dig deeper and learn other cool things you can do with the HttpClient – head on over to the main HttpClient tutorial.
2. Cookbook
2.1. Examples with Version 5.x
create the http client
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
send basic GET request
httpClient.execute(new HttpGet("http://www.google.com"),
response -> {
//handle response
}
);
get the Status Code of the HTTP Response
httpClient.execute(new HttpGet("http://www.google.com"),
response -> {
assertThat(response.getCode()).isEqualTo(200);
return response;
}
);
get the Media Type of the response
httpClient.execute(new HttpGet("http://www.google.com"),
response -> {
final String contentMimeType = ContentType.parse(response.getEntity().getContentType()).getMimeType();
assertThat(contentMimeType).isEqualTo(ContentType.TEXT_HTML.getMimeType());
return response;
}
);
get the body of the response
httpClient.execute(new HttpGet("http://www.google.com"),
response -> {
String bodyAsString = EntityUtils.toString(response.getEntity());
assertThat(bodyAsString, notNullValue());
return response;
}
);
configure the timeout on a request
RequestConfig requestConfig = RequestConfig.custom() .setConnectionRequestTimeout(Timeout.ofMilliseconds(2000L)) .build();
request.setConfig(requestConfig);
httpClient.execute(request, response -> { //handle response }
configure timeout on the entire client
ConnectionConfig connConfig = ConnectionConfig.custom()
.setConnectTimeout(timeout, TimeUnit.MILLISECONDS)
.setSocketTimeout(timeout, TimeUnit.MILLISECONDS)
.build();
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(Timeout.ofMilliseconds(2000L))
.build();
BasicHttpClientConnectionManager cm = new BasicHttpClientConnectionManager();
cm.setConnectionConfig(connConfig);
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(cm)
.build();
send a POST request
httpClient.execute(new HttpPost(SAMPLE_URL),
response -> {
//handle response
}
);
add parameters to a request
HttpPost httpPost = new HttpPost(SAMPLE_POST_URL);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key1", "value1"));
params.add(new BasicNameValuePair("key2", "value2"));
httpPost.setEntity(new UrlEncodedFormEntity(params);
configure how redirects are handled for an HTTP Request
CloseableHttpClient httpClient = HttpClientBuilder.create()
.disableRedirectHandling()
.build();
httpClient.execute(new HttpGet("http://t.co/I5YYd9tddw"),
response -> {
assertThat(response.getCode(), equalTo(301));
return response;
}
);
configure the headers for a request
HttpGet request = new HttpGet(SAMPLE_URL);
request.addHeader(HttpHeaders.ACCEPT, "application/xml");
httpClient.execute(request,
response -> {
//handle response
}
);
get the headers from the response
httpClient.execute(new HttpGet(SAMPLE_URL),
response -> {
Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
assertThat(headers, not(emptyArray()));
}
);
close/release resources
HttpGet httpGet = new HttpGet(SAMPLE_GET_URL);
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
httpClient.execute(httpGet, resp -> {
assertThat(resp.getCode()).isEqualTo(200);
return resp;
});
}
2.2. Examples with Version 4.5
create the http client
CloseableHttpClient client = HttpClientBuilder.create().build();
send basic GET request
client.execute(new HttpGet("http://www.google.com"));
get the Status Code of the HTTP Response
CloseableHttpResponse response = client.execute(new HttpGet("http://www.google.com"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(200));
get the Media Type of the response
CloseableHttpResponse response = client.execute(new HttpGet("http://www.google.com"));
String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType();
assertThat(contentMimeType, equalTo(ContentType.TEXT_HTML.getMimeType()));
get the body of the response
CloseableHttpResponse response = client.execute(new HttpGet("http://www.google.com"));
String bodyAsString = EntityUtils.toString(response.getEntity());
assertThat(bodyAsString, notNullValue());
configure the timeout on a request
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(1000)
.setConnectTimeout(1000)
.setSocketTimeout(1000)
.build();
HttpGet request = new HttpGet(SAMPLE_URL);
request.setConfig(requestConfig);
client.execute(request);
configure timeout on the entire client
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(1000)
.setConnectTimeout(1000)
.setSocketTimeout(1000)
.build();
HttpClientBuilder builder = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig);
client = builder.build();
send a POST request
client.execute(new HttpPost(SAMPLE_URL));
add parameters to a request
HttpPost httpPost = new HttpPost(SAMPLE_POST_URL);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("key1", "value1"));
params.add(new BasicNameValuePair("key2", "value2"));
httpPost.setEntity(new UrlEncodedFormEntity(params);
configure how redirects are handled for an HTTP Request
CloseableHttpClient client = HttpClientBuilder.create()
.disableRedirectHandling()
.build();
CloseableHttpResponse response = client.execute(new HttpGet("http://t.co/I5YYd9tddw"));
assertThat(response.getStatusLine().getStatusCode(), equalTo(301));
configure the headers for a request
HttpGet request = new HttpGet(SAMPLE_URL);
request.addHeader(HttpHeaders.ACCEPT, "application/xml");
response = client.execute(request);
get the headers from the response
CloseableHttpResponse response = client.execute(new HttpGet(SAMPLE_URL));
Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE);
assertThat(headers, not(emptyArray()));
close/release resources
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpGet httpGet = new HttpGet(SAMPLE_URL);
try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
// handle response;
HttpEntity entity = response.getEntity();
if (entity != null) {
try (InputStream instream = entity.getContent()) {
// Process the input stream if needed
}
}
}
}
3. Go Deep Into HttpClient
The HttpClient library is quite a powerful tool if used correctly – if you want to start exploring what the client can do – check out some of the tutorials:
You can also dig a lot deeper into the HttpClient by exploring the entire series.
4. Conclusion
This format is a bit different from how I usually structure my articles – I’m publishing some of my internal development cookbooks on a given topic – on Google Guava, Hamcrest and Mockito – and now HttpClient. The goal is to have this information readily available online – and to add to it whenever I run into a new useful example.
As always, the complete source code is available over on GitHub. For HttpClient 4.x code snippets, please refer to our HttpClient 4 module.
This is a Maven based project, so it should be easy to import and run as it is.