2010-01-11 14 views
5

Ich hole eine Webseite mit der Apache httpcomponents Java library. Nach dem Verbinden des Ergebnisses bekomme ich eine HttpEntity, die eine Methode getContent() hat, die eine InputStream zurückgibt und auch eine Methode writeTo() hat, die in einen OutputStream schreibt.In httpclient, was ist der eleganteste Weg, um HttpEntity zu einem String zu machen?

Ich möchte das Ergebnis in eine Zeichenfolge zum Extrahieren von Informationen verwandeln. Was ist der eleganteste (und sicherste) Weg dies zu tun?

Einige mögliche Lösungen:

  • Schreibe eine ByteArrayOutputStream und dann mit einem String-Konstruktor
  • Verwendung Input zu lesen gerade aus dem Strom, diese Bytes in einen String konvertieren und in eine String setzen

Beide fühlen sich ein bisschen hässlich. Würden Sie mir empfehlen, eines dieser oder etwas anderes zu wählen?

Antwort

4

Was (pseudo):

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

würden Sie haben Ausnahmen auf eigene Faust in diesem Fall zu behandeln.

0

Es mag hässlich sein, aber ich denke, das ist der einzige Weg, es zu tun. Sie können IOUtils.toString() von Commons-IO verwenden, ohne Ihren eigenen Code schreiben zu müssen.

6

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

+0

Ich denke, dies ist die richtige Antwort, die Bibliothek bietet die EntityUtils-Klasse für genau diesen Grund –

+0

Das Problem mit diesem Ansatz ist, dass, wenn Sie bereits die Ressourcen bereinigt haben, indem Sie die httpResponse.close() aufrufen und erhalten möchten Die String-Repräsentation der Entity an anderer Stelle, die den obigen Code verwendet, verursacht eine Ausnahme "java.net.SocketException: socket closed" ausgelöst zu werden. –

Verwandte Themen