В httpclient какой самый элегантный/правильный способ превратить HttpEntity в строку?

Я получаю веб-страницу, используя http://hc.apache.org/. После подключения я получаю результат HttpEntity с методом getContent(), который возвращает InputStream, а также имеет метод writeTo(), который записывает в OutputStream.

Я хочу превратить результат в строку для извлечения информации. Каков самый элегантный (и безопасный) способ сделать это?

Некоторые возможные решения:

  • Запишите в ByteArrayOutputStream, а затем преобразуйте эти байты в строку с помощью конструктора строки.
  • используйте InputStreamReader для чтения прямо из потока и поместите в StringBuilder

Оба они чувствуют себя немного уродливыми. Вы бы порекомендовали выбрать один из них или что-то другое?


person Nick Fortescue    schedule 11.01.2010    source источник


Ответы (3)


Как насчет (псевдо):

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

В этом случае вам придется обрабатывать исключения самостоятельно.

person Nate    schedule 11.01.2010

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

person Narasimha Reddy Lomadi    schedule 27.09.2012
comment
Я думаю, что это правильный ответ, библиотека предоставляет класс EntityUtils именно по этой причине. - person Erin Drummond; 27.12.2012
comment
Проблема с этим подходом заключается в том, что если вы уже очистили ресурсы, вызвав httpResponse.close(), и хотите получить строковое представление Entity в другом месте, использование приведенного выше кода вызовет java.net.SocketException: сокет закрыт. исключение, которое нужно выбросить. - person Alex Fedulov; 21.12.2013

Это может быть некрасиво, но я думаю, что это единственный способ сделать это. Вы можете использовать IOUtils.toString() из Commons-IO, но без необходимости писать собственный код.

person Mirko N.    schedule 11.01.2010