在现如今的互联网时代,HTTP协议已成为重要的应用层协议,而HTTP客户端是非常重要的组成部分。Apache HttpComponents是一套多用途的Java HTTP客户端库,其中CloseableHttpClient类是其核心组件之一,本文将从多个方面对CloseableHttpClient做详细介绍。
一、什么是CloseableHttpClient?
CloseableHttpClient是一个实现了Closeable接口的HttpClient,继承自HttpClient。在Java SE 7中引入了AutoCloseable接口,该接口的实现类必须实现一个关闭方法close()。而CloseableHttpClient实现了AutoCloseable接口和HttpClient接口,可以自动关闭连接管理器和销毁HttpClient实例。
二、CloseableHttpClient的优点
与HttpClient相比,CloseableHttpClient具有以下几个优点:
1、支持连接池管理,即可复用已建立的连接;
2、自动管理连接释放;
3、支持GZIP解压;
4、支持HTTPS访问;
5、支持通用连接超时设置;
6、性能更优。
三、如何使用CloseableHttpClient?
使用CloseableHttpClient需要以下几个步骤:
1、创建CloseableHttpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
2、创建请求
使用HttpGet或HttpPost创建请求实例。
HttpGet httpGet = new HttpGet("http://www.example.com"); HttpPost httpPost = new HttpPost("http://www.example.com");
3、添加请求头信息
根据需要添加请求头信息,例如添加User-Agent。
httpGet.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36");
4、执行请求
使用CloseableHttpClient的execute方法执行请求。
CloseableHttpResponse response = httpClient.execute(httpGet);
5、处理返回结果
可以通过response获取返回结果,例如获取状态码、响应头和响应实体等。
int statusCode = response.getStatusLine().getStatusCode(); HttpEntity entity = response.getEntity(); if (entity != null) { String responseBody = EntityUtils.toString(entity, "UTF-8"); }
四、CloseableHttpClient的实例管理
为了使CloseableHttpClient实例最大限度地重用,并且防止HTTP连接泄漏,需要对其进行实例管理。
1、单例模式
使用单例模式创建唯一的CloseableHttpClient实例,通过getInstance()方法获取单例实例。
public class HttpClientPool { private static CloseableHttpClient httpClient; private HttpClientPool() {} public static CloseableHttpClient getInstance() { if (httpClient == null) { synchronized (HttpClientPool.class) { if (httpClient == null) { httpClient = HttpClients.createDefault(); } } } return httpClient; } }
2、连接池
使用连接池管理CloseableHttpClient实例,可以防止连接泄漏和提高性能。
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); cm.setMaxTotal(200); cm.setDefaultMaxPerRoute(20); CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(cm) .build();
3、关闭连接池
在应用程序结束时,应关闭连接管理器以释放所有的系统资源。
httpClient.close();
五、CloseableHttpClient常用设置
1、设置请求超时时间
RequestConfig config = RequestConfig.custom() .setConnectTimeout(5000) .setSocketTimeout(5000) .build(); HttpGet httpGet = new HttpGet("http://www.example.com"); httpGet.setConfig(config);
2、设置代理
HttpHost proxy = new HttpHost("127.0.0.1", 8080, "http"); RequestConfig config = RequestConfig.custom() .setProxy(proxy) .build(); HttpGet httpGet = new HttpGet("http://www.example.com"); httpGet.setConfig(config);
3、设置Cookie
CloseableHttpClient httpClient = HttpClients.createDefault(); CookieStore cookieStore = new BasicCookieStore(); CloseableHttpClient httpClient = HttpClients.custom() .setDefaultCookieStore(cookieStore) .build();
4、添加POST请求参数
List<NameValuePair> paramList = new ArrayList<>(); paramList.add(new BasicNameValuePair("username", "admin")); paramList.add(new BasicNameValuePair("password", "123456")); UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "UTF-8"); httpPost.setEntity(entity);
5、设置异常重试
CloseableHttpClient允许在遇到异常时进行重试,可以通过HttpClientBuilder进行设置。
CloseableHttpClient httpClient = HttpClients.custom() .setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)) .build();
六、小结
本文详细介绍了CloseableHttpClient的定义、优点、使用方法和实例管理,并提供了一些常用设置的示例代码。使用CloseableHttpClient可以提高HTTP请求的性能和可靠性,同时也更加便捷和易用。希望本文能够对您有所帮助。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/191093.html