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
Tags :

About the Author

mkyong
Founder of Mkyong.com and HostingCompass.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

  • http://www.androprogrammer.com wasim

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

  • Mota

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

  • 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

    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

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

  • Tom

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

    • sdfsf

      I agree