Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read full response from HttpURLConnection?

Tags:

I make some proxy server in andorid which modify http headers, it works ok, but I have to forward full response to 'top layer'.
How I can read whole response (all headers, content, everything) from HttpURLConnection?

HttpURLConnection httpURLConnection; URL url = new URL(ADDRESS); httpURLConnection = (HttpURLConnection) url.openConnection(); // add headers, write output stream, flush if (httpURLConnection.getResponseCode() == HttpsURLConnection.HTTP_OK) {     Map<String, List<String>> map = httpURLConnection.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());     }      return new DataInputStream(httpURLConnection.getInputStream()); } 

In getInputStream I received only content it is possible to have some stream with whole reposne?

like image 980
Andrzej Avatar asked Jan 07 '14 15:01

Andrzej


1 Answers

There's no way to dump the full HTTP response directly using the HttpURLConnection, but you can use its various method to reconstruct it. For example,

HttpURLConnection httpURLConnection; URL url = new URL("http://www.google.com"); httpURLConnection = (HttpURLConnection) url.openConnection(); StringBuilder builder = new StringBuilder(); builder.append(httpURLConnection.getResponseCode())        .append(" ")        .append(httpURLConnection.getResponseMessage())        .append("\n");  Map<String, List<String>> map = httpURLConnection.getHeaderFields(); for (Map.Entry<String, List<String>> entry : map.entrySet()) {     if (entry.getKey() == null)          continue;     builder.append( entry.getKey())            .append(": ");      List<String> headerValues = entry.getValue();     Iterator<String> it = headerValues.iterator();     if (it.hasNext()) {         builder.append(it.next());          while (it.hasNext()) {             builder.append(", ")                    .append(it.next());         }     }      builder.append("\n"); }  System.out.println(builder); 

prints

200 OK X-Frame-Options: SAMEORIGIN Transfer-Encoding: chunked Date: Tue, 07 Jan 2014 16:06:45 GMT P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info." X-XSS-Protection: 1; mode=block Expires: -1 Alternate-Protocol: 80:quic Set-Cookie: NID=67=OIu8_xhcxE-UPCSfIoTINvRyOe4ALVhIqan2NUI6LMdRkSJHTPGvNkYeYE--WqPSEPK4c4ubvmjWGUyFgXsa453KHavX9gUeKdzfInU2Q25yWP3YtMhsIhJpUQbYL4gq; expires=Wed, 09-Jul-2014 16:06:45 GMT; path=/; domain=.google.ca; HttpOnly, PREF=ID=4496ed99b812997d:FF=0:TM=1389110805:LM=1389110805:S=jxodjb3UjGJSZGaF; expires=Thu, 07-Jan-2016 16:06:45 GMT; path=/; domain=.google.ca Content-Type: text/html; charset=ISO-8859-1 Server: gws Cache-Control: private, max-age=0 

You can then get the InputStream and print its content too.

like image 196
Sotirios Delimanolis Avatar answered Oct 26 '22 11:10

Sotirios Delimanolis