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>
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.