Custom HTTP Header with the HttpClient
A quick guide to set custom HTTP Header in Apache HTTPClient request. On HttpRequest call setHeader() method to set HttpHeaders content type as JSON. Covered for various versions of HttpClient (4.3 before and after).
1. Introduction
In this tutorial, You’ll learn today how to set custom HTTP Header to HTTPClient Request. If you want to learn and dig deeper, move to the tutorial section Apache HTTPClient here.
All examples in this post, We will use the domain “http://www.google.com” for creating requests. Because it is considered as always up and running.
Sometimes in the interview, the same is asked as ” How to send POST parameters with RequestBuilder?”
2. Set Header on Request – 4.3 and Above
HttpClient 4.3 has introduced a new way of building requests with
RequestBuilder. RequestBuilder.get() method returns the request. To set the header on the HttpRequest, we’ll use the setHeader() method on the builder.
The below example is to set the header as below.
package com.java.w3schools.blog.HttpClient; import java.io.IOException; import org.apache.http.HttpHeaders; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.impl.client.HttpClients; public class HttpHeaderSetHeaderExample { private static String URI = "http://www.google.com"; public static void main(String[] args) throws ClientProtocolException, IOException { HttpClient client = HttpClients.custom().build(); HttpUriRequest request = RequestBuilder.get().setUri(URI) .setHeader(HttpHeaders.CONTENT_TYPE, "application/json").build(); client.execute(request); System.out.println("Getting the header info from request"); System.out.println("request header propery name : " + request.getAllHeaders()[0].getName()); System.out.println("request header propery value : " + request.getAllHeaders()[0].getValue()); } }
Output:
Getting the header info from request request header propery name : Content-Type request header propery value : application/json
3. Set Header on Request – Before 4.3
It is quite different from version 4.3. In the older version, you need to use the HttpGet class to create the request. The object of HttpGet is considered a request object. On HttpGet, We’ll call setHeader() method. Finally, Invoke the execute() method on HttpClient.
In the below example, we have set the many properties as part of the header.
package com.java.w3schools.blog.HttpClient; import java.io.IOException; import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; public class HttpHeaderSetHeaderExample4_3Before { private static String URI = "http://www.google.com"; public static void main(String[] args) throws ClientProtocolException, IOException { HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(URI); request.setHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br"); request.setHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"); request.setHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); request.setHeader(HttpHeaders.CONNECTION, "keep-alive"); request.setHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"); request.setHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0"); request.setHeader(HttpHeaders.HOST, "http://www.google.com"); client.execute(request); System.out.println("Getting the header info from request before HttpClient 4.3 version."); Header[] headers = request.getAllHeaders(); for (Header header : headers) { System.out.println("request header propery : " + header.getName() + " Value : " + header.getValue()); } } }
Output:
Getting the header info from request before HttpClient 4.3 version. request header propery : Accept-Encoding Value : gzip, deflate, br request header propery : Accept-Language Value : en-US,en;q=0.5 request header propery : Accept Value : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 request header propery : Connection Value : keep-alive request header propery : Cache-Control Value : max-age=0 request header propery : User-Agent Value : Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0 request header propery : Host Value : http://www.google.com
4. Set Default Header on the Client
There is an option to set common headers to all requests at once. In this approach, setting up headers info is done only once.
Instead of setting the Headers info on each and every request, we can also configure it as a default header on the Client itself.
When Creating HTTPClient, call setDefaultHeaders() method which takes List of Headers and set them to each request.
This is extremely helpful when the header needs to be the same for all requests – such as a custom application header.
package com.java.w3schools.blog.HttpClient; import java.io.IOException; import java.util.Arrays; import java.util.List; import org.apache.http.Header; import org.apache.http.HttpHeaders; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.params.HttpParams; public class HttpHeaderSetHeaderExample4_3Before { private static String URI = "http://www.google.com"; public static void main(String[] args) throws ClientProtocolException, IOException { Header header1 = new BasicHeader(HttpHeaders.CONTENT_TYPE, "application/json"); Header header2 = new BasicHeader(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate, br"); Header header3 = new BasicHeader(HttpHeaders.ACCEPT_LANGUAGE, "en-US,en;q=0.5"); Header header4 = new BasicHeader(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"); Header header5 = new BasicHeader(HttpHeaders.CONNECTION, "keep-alive"); Header header6 = new BasicHeader(HttpHeaders.CACHE_CONTROL, "max-age=0"); Header header7 = new BasicHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0"); Header header8 = new BasicHeader(HttpHeaders.HOST, "http://www.google.com"); List<Header> headers = Arrays.asList(header1, header2, header3, header4, header5, header6, header7, header8); HttpClient client = HttpClients.custom().setDefaultHeaders(headers).build(); HttpUriRequest request = RequestBuilder.get().setUri(URI).build(); client.execute(request); } }
If you want to add additional headers in a request, you can then using the
setHeader() method on a particular request.
5. Exceptions
If you try to access any of unsupported operations such as client.getParams().
HttpParams allHeaders = client.getParams();
The above code produces the below error.
Exception in thread "main" java.lang.UnsupportedOperationException at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) at com.java.w3schools.blog.HttpClient.HttpHeaderSetHeaderExample4_3Before.main(HttpHeaderSetHeaderExample4_3Before.java:40)
6. Conclusion
In this article, We’ve seen how to set the custom header information to the HTTP Request.
Example programs to set HTTP headers on each request in version 4.3 and above. And also setting up default to all requests in a client.
The examples shown are available over GitHub
Published on Java Code Geeks with permission by Venkatesh Nukala, partner at our JCG program. See the original article here: Custom HTTP Header with the HttpClient Opinions expressed by Java Code Geeks contributors are their own. |