Я просмотрел рекомендуемый пример с веб-сайта apache httpclient commons.
В этом примере они использовали EntityUtils.toString (..) без необходимости использовать EntityUtils.consume (..) до или after.
Они упоминают, что вызов httpclient.close () гарантирует, что все ресурсы закрыты.
source: https://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientWithResponseHandler.java
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpGet httpget = new HttpGet("http://httpbin.org/");
System.out.println("Executing request " + httpget.getRequestLine());
// Create a custom response handler
ResponseHandler<String> responseHandler = new ResponseHandler<String>() {
@Override
public String handleResponse(
final HttpResponse response) throws ClientProtocolException, IOException {
int status = response.getStatusLine().getStatusCode();
if (status >= 200 && status < 300) {
HttpEntity entity = response.getEntity();
return entity != null ? EntityUtils.toString(entity) : null;
} else {
throw new ClientProtocolException("Unexpected response status: " + status);
}
}
};
String responseBody = httpclient.execute(httpget, responseHandler);
System.out.println("----------------------------------------");
System.out.println(responseBody);
} finally {
httpclient.close();
}
Это это то, что цитируется для приведенного выше примера:
Этот пример демонстрирует, как обрабатывать ответы HTTP с помощью обработчика ответов. Это рекомендуемый способ выполнения HTTP-запросов и обработки HTTP-ответов. Этот подход позволяет вызывающему абоненту сконцентрироваться на процессе обработки HTTP-ответов и делегировать задачу освобождения системных ресурсов HttpClient. Использование обработчика HTTP-ответа гарантирует, что базовое HTTP-соединение будет возвращено диспетчеру соединений автоматически во всех случаях.