2010-01-11 13 views
5

Estoy buscando una página web usando Apache httpcomponents Java library. Después de conectar el resultado que obtengo es un HttpEntity que tiene un método getContent() que devuelve un InputStream y también tiene un método writeTo() que escribe en un OutputStream.En httpclient, ¿cuál es la forma más elegante/correcta de convertir HttpEntity en una cadena?

Quiero convertir el resultado en una Cadena para extraer información. ¿Cuál es la forma más elegante (y segura) de hacer esto?

Algunas soluciones posibles:

  • escribir en un ByteArrayOutputStream y luego convertir esos bytes de una cadena con un constructor de String
  • uso InputStreamReader para leer directamente de la corriente, y poner en un StringBuilder

Ambos se sienten un poco feos. ¿Recomendarías elegir uno de estos o algo más?

Respuesta

4

¿Qué hay de (pseudo):

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

Usted tendría que manejar excepciones por su cuenta en este caso.

0

Puede ser feo, pero creo que esa es la única manera de hacerlo. Puede usar IOUtils.toString() de Commons-IO sin tener que escribir su propio código.

6

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

+0

Creo que esta es la respuesta correcta, la biblioteca proporciona la clase EntityUtils exactamente por este motivo –

+0

El problema con este enfoque es que si ya ha limpiado los recursos llamando al httpResponse.close() y desea obtener la representación de cadena de la Entidad en otro lugar, utilizando el código anterior causará una excepción "java.net.SocketException: socket closed" para ser lanzada. –

Cuestiones relacionadas