Debug a HttpURLConnection problem

Take this example.

import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.net.URLConnection;

public class HttpConnect {
    public static void main(String[] args) throws Exception {
      URL url = new URL("http://www.rgagnon.com/howto.html");
      URLConnection con = url.openConnection();
      Reader reader = new InputStreamReader(con.getInputStream());
      while (true) {
        int ch = reader.read();
        if (ch==-1) {
          break;
        }
        System.out.print((char)ch);
      }
    }
}

The above snippet reads the HTML page and dumps it to the console.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD>
<!-- developpe par  Real Gagnon, Quebec Canada -->
<LINK REL="SHORTCUT ICON" HREF="http://www.maixuanviet.com/favicon.ico">
<META NAME="description"
      Content="Real's JAVA JAVASCRIPT WSH and PowerBuilder How-to pages with useful code snippets">
<META NAME="keywords"
      Content="java,javascript,wsh,vbscript,how-to,powerbuilder">
<LINK title="mystyle" href="howto.css" type="text/css" rel="stylesheet">
...

To trace what is going on at the HTTP protocol level, we can switch the HttpURLConnection/UrlConnection in debug mode.

You must enable the java-logging mechanism by setting a special property when starting the JVM :

java.exe -Djava.util.logging.config.file=logging.properties HttpConnect

and put in logging.properties file (by default in JRE_HOME\lib) the following property

sun.net.www.protocol.http.HttpURLConnection.level = ALL

Note :
If running from Eclipse, you put the -Djava.util.logging… via the Run configuration dialog -> Arguments Tab -> VM arguments textarea.

The result is :

2010-08-07 00:00:31 sun.net.www.protocol.http.HttpURLConnection writeRequests
FIN: sun.net.www.MessageHeader@16caf435 pairs: {GET /howto.html HTTP/1.1: null}{User-Agent: Java/1.6.0_20}{Host: www.maixuanviet.com}{Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2}{Connection: keep-alive}
2010-08-07 00:00:31 sun.net.www.protocol.http.HttpURLConnection getInputStream
FIN: sun.net.www.MessageHeader@5ac0728 pairs: {null: HTTP/1.1 200 OK}{Date: Sat, 07 Aug 2010 04:00:33 GMT}{Server: Apache}{Accept-Ranges: bytes}{Content-Length: 17912}{Keep-Alive: timeout=5, max=64}{Connection: Keep-Alive}{Content-Type: text/html}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD>
<!-- developpe par  Real Gagnon, Quebec Canada -->
<LINK REL="SHORTCUT ICON" HREF="http://www.maixuanviet.com/favicon.ico">
<META NAME="description"
      Content="Real's JAVA JAVASCRIPT WSH and PowerBuilder How-to pages with useful code snippets">
...

Done! Happy Coding!

Related posts:

Java – Generate Random String
Java Program to Generate Random Numbers Using Probability Distribution Function
StringBuilder vs StringBuffer in Java
Java Program to Implement Counting Sort
Custom JUnit 4 Test Runners
Java Program to Implement Skip List
Java Program to Implement Iterative Deepening
Java Program to Solve Set Cover Problem assuming at max 2 Elements in a Subset
Java Program to Implement ArrayDeque API
Spring MVC Custom Validation
Java Program to Check if a Point d lies Inside or Outside a Circle Defined by Points a, b, c in a Pl...
ExecutorService – Waiting for Threads to Finish
Sort a HashMap in Java
Hướng dẫn Java Design Pattern – Chain of Responsibility
Hướng dẫn Java Design Pattern – Singleton
Map Serialization and Deserialization with Jackson
Converting Iterator to List
Query Entities by Dates and Times with Spring Data JPA
Convert String to Byte Array and Reverse in Java
A Guide to Iterator in Java
Java Program to Implement Coppersmith Freivald’s Algorithm
Java Program to Implement Multi-Threaded Version of Binary Search Tree
Java Program to Solve a Matching Problem for a Given Specific Case
Java Stream Filter with Lambda Expression
Consuming RESTful Web Services
Java Program to Implement Gauss Jordan Elimination
Java Program to Perform LU Decomposition of any Matrix
Hướng dẫn Java Design Pattern – Memento
Guide to Spring 5 WebFlux
Java Program to Implement an Algorithm to Find the Global min Cut in a Graph
Properties with Spring and Spring Boot
Upload and Display Excel Files with Spring MVC