我查看了 apache httpclient commons 网站上的推荐示例。
在示例中,他们使用了 EntityUtils.toString(..) 而无需在前后使用 EntityUtils.consume(..)。
他们提到调用 httpclient.close() 可确保关闭所有资源。
来源: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 连接将在所有情况下自动释放回连接管理器。