在現如今的互聯網時代,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/zh-hant/n/191093.html
微信掃一掃
支付寶掃一掃