Pages

Saturday, November 20, 2021

HttpClient 4 – Get the Status Code Example

1. Introduction


In this very quick tutorial, I will show how to get and validate the StatusCode of the HTTP Response using HttpClient 4.

2. Maven Dependencies


The following jars are required to run this HttiClient application.

commons-logging is internally is being used by other jars. Please do not forget to add these jars else you will get compile-time and runtime errors.

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

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

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpcore</artifactId>
    <version>4.4.13</version>
</dependency>

Error:

If you miss commons-logging jar then below exception will be produced.


Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
 at org.apache.http.conn.ssl.DefaultHostnameVerifier.<init>(DefaultHostnameVerifier.java:82)
 at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:966)
 at com.java.w3schools.blog.HttpClient.HttpClientGetStatusCode.main(HttpClientGetStatusCode.java:21)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
 at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
 ... 3 more

3. Retrieve the Status Code from the Http Response

Once the HTTP Request is sent and after processing response will be sent back to the caller.

package com.java.w3schools.blog.HttpClient;

import java.io.IOException;

import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

public class HttpClientGetStatusCode {

 private static final String GOOGLE_URL = "http://www.google.com";

 private static CloseableHttpClient instance;

 private static CloseableHttpResponse response;

 public static void main(String[] args) throws ClientProtocolException, IOException {
  HttpGet httpGet = new HttpGet(GOOGLE_URL);
  instance = HttpClientBuilder.create().build();

  response = instance.execute(httpGet);

  System.out.println("response.getStatusLine() :: " + response.getStatusLine());
  final int statusCode = response.getStatusLine().getStatusCode();

  int code = HttpStatus.SC_OK;

  if (code == statusCode) {

   System.out.println("Status Code  : " + code);
  } else {
   System.out.println("StatusCode not 200  : " + code);
  }

 }

}

The returned response type of org.apache.http.HttpResponse which allows us to get the status of execution of the request. getStatusLine() method returns StatusLine object which holds the status of the request. use getStatusCode() to get only execution code.

Output:

response.getStatusLine() :: HTTP/1.1 200 OK
Status Code  : 200

4. Exception if URL is down


If the given URL is down or wrong then we will get UnknownHostException runtime exception.


Exception in thread "main" java.net.UnknownHostException: www.google.com1: nodename nor servname provided, or not known
 at java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
 at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929)
 at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1515)
 at java.base/java.net.InetAddress$NameServiceAddresses.get(InetAddress.java:848)
 at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1505)
 at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1364)
 at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1298)
 at org.apache.http.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
 at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:112)
 at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:376)
 at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:393)
 at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236)
 at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
 at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
 at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
 at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
 at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
 at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
 at com.java.w3schools.blog.HttpClient.HttpClientGetStatusCode.main(HttpClientGetStatusCode.java:24)



5. Conclusion


In this article, We've seen how to get the status code for a HttpClient request.

As usual, The example shown in this article is on Github.

GitHub Code

No comments:

Post a Comment

Please do not add any spam links in the comments section.