How to get HTTP Response Header in Java

This example shows you how to get the Http response header values in Java.

1. Standard JDK example.


	URL obj = new URL("http://mkyong.com");
	URLConnection conn = obj.openConnection();
	
	//get all headers
	Map<String, List<String>> map = conn.getHeaderFields();
	for (Map.Entry<String, List<String>> entry : map.entrySet()) {
		System.out.println("Key : " + entry.getKey() + 
                 " ,Value : " + entry.getValue());
	}
	
	//get header by 'key'
	String server = conn.getHeaderField("Server");
	

2. Apache HttpClient example.


	HttpClient client = HttpClientBuilder.create().build();
	HttpGet request = new HttpGet("http://mkyong.com");
	HttpResponse response = client.execute(request);
	
	//get all headers		
	Header[] headers = response.getAllHeaders();
	for (Header header : headers) {
		System.out.println("Key : " + header.getName() 
		      + " ,Value : " + header.getValue());
	}

	//get header by 'key'
	String server = response.getFirstHeader("Server").getValue();

1. URLConnection Example

See a full example to get response headers value via URLConnection.

ResponseHeaderUtil.java

package com.mkyong;

import java.net.URL;
import java.net.URLConnection;
import java.util.List;
import java.util.Map;

public class ResponseHeaderUtil {

  public static void main(String[] args) {

    try {

	URL obj = new URL("http://mkyong.com");
	URLConnection conn = obj.openConnection();
	Map<String, List<String>> map = conn.getHeaderFields();

	System.out.println("Printing Response Header...\n");

	for (Map.Entry<String, List<String>> entry : map.entrySet()) {
		System.out.println("Key : " + entry.getKey() 
                           + " ,Value : " + entry.getValue());
	}

	System.out.println("\nGet Response Header By Key ...\n");
	String server = conn.getHeaderField("Server");

	if (server == null) {
		System.out.println("Key 'Server' is not found!");
	} else {
		System.out.println("Server - " + server);
	}

	System.out.println("\n Done");

    } catch (Exception e) {
	e.printStackTrace();
    }

  }
}

Output


Printing Response Header...

Key : null ,Value : [HTTP/1.1 200 OK]
Key : ETag ,Value : ["713cd-9b82-4dd6d789447c0"]
Key : Content-Length ,Value : [39810]
Key : Expires ,Value : [Fri, 24 May 2013 03:22:31 GMT]
Key : Last-Modified ,Value : [Fri, 24 May 2013 02:22:31 GMT]
Key : Connection ,Value : [Keep-Alive]
Key : X-Powered-By ,Value : [W3 Total Cache/0.9.2.9]
Key : Server ,Value : [Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635]
Key : Pragma ,Value : [public]
Key : Cache-Control ,Value : [public]
Key : Date ,Value : [Fri, 24 May 2013 02:22:37 GMT]
Key : Vary ,Value : [Accept-Encoding,Cookie]
Key : Keep-Alive ,Value : [timeout=2, max=100]
Key : Content-Type ,Value : [text/html]
Key : Accept-Ranges ,Value : [bytes]

Get Response Header By Key ...

Server - Apache/2.2.22 (Unix) mod_ssl/2.2.22 OpenSSL/1.0.0-fips mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635

Done

2. Apache HttpClient Example

This is an equivalent example, but using Apache HttpClient.

ResponseHeaderUtil.java

package com.mkyong;

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

public class ResponseHeaderUtil {

  public static void main(String[] args) {

    try {

	HttpClient client = HttpClientBuilder.create().build();
	HttpGet request = new HttpGet("http://mkyong.com");
	HttpResponse response = client.execute(request);
			
	System.out.println("Printing Response Header...\n");

	Header[] headers = response.getAllHeaders();
	for (Header header : headers) {
		System.out.println("Key : " + header.getName() 
                           + " ,Value : " + header.getValue());

	}

	System.out.println("\nGet Response Header By Key ...\n");
	String server = response.getFirstHeader("Server").getValue();

	if (server == null) {
		System.out.println("Key 'Server' is not found!");
	} else {
		System.out.println("Server - " + server);
	}

	System.out.println("\n Done");

    } catch (Exception e) {
	e.printStackTrace();
    }
  }
}

References

  1. Wiki : List of HTTP header fields
  2. How To Get HTTP Request Header In Java
  3. URLConnection.html#getHeaderFields() Java Doc
  4. Apache Http Components – HttpClient
  5. How To Send HTTP Request GET/POST In Java

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Marcel Richter
Guest
Marcel Richter

NullPointerException is possible: String server = response.getFirstHeader(“Server”).getValue();

PauloPereira
Guest
PauloPereira

why my HttpClientBuilder is not recognized??

I’ve added the dependency. Just the HttpClientBuilder is not recognized.. :/

john
Guest
john

Hi
How to parse pagination rest api calls in java
Thanks

Hemanth
Guest
Hemanth

Hi!

Firstly, thanks for your articles! they’ve been very useful for me.

I have a doubt; how do you access the fields in the HttpResponse body instead of the headers?

My HttpResponse is like this:
{“APIKey”:”cf5f037d-8ac5-481f-b629″,”StatusCode”:0,”StatusMessage”:”You have been successfully logged in.”}

and I need to take the APIKey value from it. is there a way to do this?

thanks!

Patrick Reinhardt
Guest
Patrick Reinhardt

Recommended PHP based online http header checker
http://freeonlinetools24.com/status

TianZhu
Guest
TianZhu
try to access http://www.sam.gov -> DATA ACCESS page via the java urlconnection, the response status is right, but the response content was not. any idea? the code is as following: URL url1 = new URL(“https://www.sam.gov/”); HttpsURLConnection conn = (HttpsURLConnection) url1.openConnection(); String cookie =””; String cookstr =””; String postaction=””; String url = “https://www.sam.gov”; String idstr = “”; String idvalStr =””; String formid = “”; int lc =6 ; conn.setRequestProperty(“Cookie”, cookie); conn.connect(); BufferedReader inn = new BufferedReader( new InputStreamReader(conn.getInputStream())); String inputLine1; StringBuffer response1 = new StringBuffer(); while ((inputLine1 = inn.readLine()) != null ) { if (inputLine1.indexOf(“_viewRoot:extractsForm”) >0 && inputLine1.indexOf(“action=”) >0 ) {… Read more »
wasim
Guest
wasim

this is really great and useful to me in servlet and android also ..

Mota
Guest
Mota

Hey, do you know why it doesn’t show the last-modified value for php files?

Rylie
Guest
Rylie

thanx very much. I’m URLConnection and I dont know how to pass string data along for the file – until I read this tutorial

Monica
Guest
Monica

Thank you very much for your tutorials. A question regarding ResponseHeaderUtil.java

I used the statement

String fileLength = conn.getHeaderField(“Content-Length”);

in an Android app and it blocked the app. There were no errors listed. The application just did not continue to do what it had to do (to download a file and show the progress in a progress bar.) I f get the length of the file with

fileLength = connection.getContentLength();

then the application works ok. Any idea about what could have happened?

Monica
Guest
Monica

I tried the Apache version and it works! I would still like to know why the Java version does not work.

Tom
Guest
Tom

Hi, I just wanted to say, “Thank you.” Your posts have helped me many times.

sdfsf
Guest
sdfsf

I agree