Apache HttpClient en Java, les cours d'eau.toString = org.apache.http.conn.EofSensorInputStream

J'obtiens une page avec Apache HttpClient et je veux stocker la réponse du serveur http du corps dans une chaîne de caractères afin que je puisse les manipuler cette chaîne et l'imprimer pour la console.

Malheureusement, lors de l'exécution de cette méthode, j'obtiens ce message:

17:52:01,862  INFO Driver:53 - fetchPage STARTING
17:52:07,580  INFO Driver:73 - fetchPage ENDING, took 5716
org.apache.http.conn.EofSensorInputStream@5e0eb724

La fetchPage Classe:

public String fetchPage(String part){
    log.info("fetchPage STARTING");
    long start = System.currentTimeMillis();

    String reply;

    String searchurl = URL + URL_SEARCH_BASE + part + URL_SEARCH_TAIL;

    HttpClient httpclient = new DefaultHttpClient();
    HttpGet httpget = new HttpGet(searchurl);
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            InputStream instream = entity.getContent();
            int l;
            byte[] tmp = new byte[2048];
            while ((l = instream.read(tmp)) != -1) {
            }
            long elapsedTimeMillis = System.currentTimeMillis()-start;
            log.info("fetchPage ENDING, took " + elapsedTimeMillis);
            reply = instream.toString();
            System.out.println(reply);
            return reply;
        }
    } catch (ClientProtocolException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        //TODO Auto-generated catch block
        e.printStackTrace();
    }

    return null;
}
L'essentiel à comprendre ici est que toString() sur un InputStream n'est pas une méthode pour lire son contenu comme un String, mais plutôt pour obtenir une simple chaîne de la représentation de l'objet lui-même. En général (y compris dans ce cas) un InputStream n'ont pas utile représentation de chaîne, il peut fournir, jusqu'à ce qu'il utilise la valeur par défaut Object.toString().

OriginalL'auteur Dominik | 2011-06-02