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:

LinkedList trong java
Java Program to implement Dynamic Array
Introduction to Spring Boot CLI
Reading an HTTP Response Body as a String in Java
Java Program to Implement IdentityHashMap API
Java Program to Find a Good Feedback Vertex Set
Quick Guide on Loading Initial Data with Spring Boot
Java Program to Perform Matrix Multiplication
What is Thread-Safety and How to Achieve it?
Toán tử trong java
How to Change the Default Port in Spring Boot
Java Program to Implement Sparse Array
Spring Data Java 8 Support
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Lớp Collections trong Java (Collections Utility Class)
Lập trình đa luồng với CompletableFuture trong Java 8
Java – Get Random Item/Element From a List
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?
Login For a Spring Web App – Error Handling and Localization
Java Program to Implement RoleUnresolvedList API
Java Program to Implement Stack using Two Queues
Retrieve User Information in Spring Security
Hướng dẫn Java Design Pattern – Object Pool
Giới thiệu về Stream API trong Java 8
Java Program to Check Multiplicability of Two Matrices
Java Program to Implement Heap’s Algorithm for Permutation of N Numbers
Java Program to Implement Park-Miller Random Number Generation Algorithm
Hướng dẫn kết nối cơ sở dữ liệu với Java JDBC
Send an email using the SMTP protocol
Java Program to Implement Booth Algorithm
Guava Collections Cookbook
How to Remove the Last Character of a String?