Search code examples
javajava-memidp

HttpConnection - javax.microedition, returning -1 for getLength() method


I am trying to program a very simple Mobile Application (J2ME) in java. The idea is to access a website via URL input and read the contents of the website into a buffer.

Here's the problem. This works perfectly fine for some URL's but not others? The example below (wikipedia) works fine. But take "http://java.com/en/about/" as an example and the "HttpConnection hc" returns -1 for getLenght() so there is no content to read into the buffer?

Here's my code:

        String url = "http://en.wikipedia.org/wiki/RSS";

        //Sets up HttpConnection and InputStream using the URL variable
        HttpConnection hc = null;
        InputStream is = null;

        try {
            hc = (HttpConnection) Connector.open(url);
            is = hc.openInputStream();
        } catch (IOException ie) {
            System.out.println(ie.getMessage());
        }

        //Reader object created to read input from InputStream
        Reader rdr = new InputStreamReader(is);

        //Variable "content" will store HTML code
        String content = "";

        //Get the lenght of the data to set the buffer sizes
        int len = (int) hc.getLength();

Any ideas? let me know if I've missed anything out!

Just for info I am using Netbeans 6.9.1

Library for HttpConnection is "javax.microedition.io.HttpConnection;" + "import javax.microedition.io.Connector;"


Solution

  • The HTTP response from java.com is

    HTTP/1.1 200 OK
    Server: Sun-Java-System-Web-Server/7.0
    Date: Wed, 23 Feb 2011 11:07:44 GMT
    Content-Type: text/html;charset=UTF-8
    Set-Cookie: JSESSIONID=B62F3DFB233BB2806018EC721F6C3FD7; Path=/
    Content-Encoding: gzip
    Vary: accept-encoding
    Transfer-Encoding: chunked
    

    The HTTP response from wikipedia is

    HTTP/1.0 200 OK
    Date: Wed, 23 Feb 2011 10:18:56 GMT
    Server: Apache
    Cache-Control: private, s-maxage=0, max-age=0, must-revalidate
    Content-Language: en
    Vary: Accept-Encoding,Cookie
    Last-Modified: Fri, 18 Feb 2011 00:23:59 GMT
    Content-Encoding: gzip
    Content-Length: 24905
    Content-Type: text/html; charset=UTF-8
    Age: 2984
    X-Cache: HIT from sq61.wikimedia.org, MISS from sq38.wikimedia.org
    X-Cache-Lookup: HIT from sq61.wikimedia.org:3128, MISS from sq38.wikimedia.org:80
    Connection: keep-alive
    

    As you see, the HTTP response of http://java.com/en/about/ doesn't contain Content-Length header, the content is chunked.

    So, the getLength() return -1.