2010-01-11 6 views
5

Je vais chercher une page Web en utilisant le Apache httpcomponents Java library. Après avoir connecté le résultat, je reçois un HttpEntity qui a une méthode getContent() qui renvoie un InputStream et a également une méthode writeTo() qui écrit dans un OutputStream.Dans httpclient, quelle est la manière la plus élégante/correcte de transformer HttpEntity en chaîne?

Je veux transformer le résultat en une chaîne pour extraire des informations. Quelle est la manière la plus élégante (et la plus sûre) de le faire?

Quelques solutions possibles:

  • Ecrire à un ByteArrayOutputStream puis convertir ces octets en une chaîne avec un constructeur String
  • utilisation InputStreamReader à lire directement à partir du flux, et mis dans un StringBuilder

Les deux se sentent un peu moche. Recommanderiez-vous de choisir l'un d'entre eux ou quelque chose d'autre?

Répondre

4

Qu'en est (pseudo):

BasicResponseHandler handler = new org.apache.http.impl.client.BasicResponseHandler();  
String str = httpClient.execute(request, handler); 

Vous auriez à gérer les exceptions sur votre propre dans ce cas.

0

Il peut être moche, mais je pense que c'est la seule façon de le faire. Vous pouvez utiliser IOUtils.toString() de Commons-IO sans avoir à écrire votre propre code.

6

System.out.println (EntityUtils.toString (httpResponse.getEntity()));

+0

Je pense que ceci est la réponse corrrect, la bibliothèque fournit la classe EntityUtils pour exactement cette raison –

+0

Le problème avec cette approche est que si vous avez déjà nettoyé les ressources en appelant le httpResponse.close() et que vous voulez obtenir la représentation sous forme de chaîne de l'entité ailleurs, en utilisant le code ci-dessus provoquera le lancement d'une exception "java.net.SocketException: socket closed". –

Questions connexes