在現如今的互聯網時代,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-hk/n/191093.html