1、HttpClient4.x 手动释放底层 HTTP 连接如非注明,本站文章均为原创,转载请注明出处。本文地址:http:/ HttpClient4.x 来说,使用完后的 HttpClient 对象,需要显式地释放其使用的底层 HTTP 连接,否则将造成过高的资源占用。前一篇文章 HttpClient4.x 进行 Get/Post 请求并使用 ResponseHandler 处理响应演示了如何使用 ResponseHandler 处理 GET/POST 请求的响应结果并自动释放底层HTTP 连接,如下这个例子演示了如何确保在手动处理 HTTP 响应的情况下释放底层的 HTTP 连接回连接管理器。
2、package cn.ysh.studio.crawler.httpclient;import java.io.IOException;import java.io.InputStream;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.impl.client.DefaultHttpCl
3、ient;/* 这个例子演示了如何以推荐的方式使用 API,以确保底层 HTTP 连接被释放回连接管理器* * author Shenghany* date 2013-5-19*/public class ClientConnectionRelease public final static void main(String args) throws Exception HttpClient httpclient = new DefaultHttpClient();try HttpGet httpget = new HttpGet(“http:/“);System.out.println(“e
4、xecuting request “ + httpget.getURI();/ 执行 HTTP 请求HttpResponse response = httpclient.execute(httpget);System.out.println(“-“);System.out.println(response.getStatusLine();System.out.println(“-“);/ 得到响应的实体HttpEntity entity = response.getEntity();/ 如果响应不包含实体,那么就不必关心连接的释放if (entity != null) InputStream
5、instream = entity.getContent();try instream.read();/ 这里可以对输入流进行一些期望的操作/. catch (IOException ex) / 如果在处理过程中遇到 IOExcetption 异常,那么连接将被自动释放回连接管理器throw ex; catch (RuntimeException ex) / 当发生意料之外的异常时,你或许希望通过终止 http 请求以立即关闭底层连接httpget.abort();throw ex; finally / 关闭输入流时将触发自动释放连接回连接管理器try instream.close(); catch (Exception ignore) finally / 当不再需要 HttpClient 实例时,关闭连接管理器以确保释放所有占用的系统资源httpclient.getConnectionManager().shutdown();