在现如今的互联网时代,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
微信扫一扫
支付宝扫一扫