HttpClient的使用步驟:
- 創建一個Http客戶端(可以進行個性化配置)
- 創建請求(常見的get、post請求)
- 客戶端發送請求,獲取響應內容,解析響應內容
一、創建Http客戶端
/** * 第一種方式 * 靜態方法, 創建HTTP客戶端, 返回 CloseableHttpClient 實例 * 本質上使用 HttpClientBuilder.create().build() 創建的(即下面要介紹到的第二種方法) */ CloseableHttpClient httpClient = HttpClients.createDefault();
/** * 第二種方式:靈活可配置 */ //調用的是 HttpClientBuilder.create(); HttpClientBuilder httpClientBuilder = HttpClients.custom(); /** * 使用 HttpClientBuilder 可以進行個性化配置,后面單獨地詳細說 */ //創建http客戶端 CloseableHttpClient httpClient = httpClientBuilder.build();
二、創建請求
/** * 第一種方式 * HttpGet和 HttpPost都實現了 HttpUriRequest接口, 本質上與第二種方式效果是一致的 * 可以調用實例方法進行個性化設置,這個后面再詳細地講解 */ HttpGet httpGet = new HttpGet("https://www.baidu.com/"); HttpPost httpPost = new HttpPost("https://www.baidu.com/");
/** * 第二種方式 * 借助 RequestBuilder 完成 */ RequestBuilder requestBuilder = RequestBuilder.get().setUri("https://www.baidu.com/"); /** * RequestBuilder的實例方法可以對請求進行個性化配置,效果等同於第一種方式的HttpGet或HttpPost的實例方法 */ HttpUriRequest httpGet = requestBuilder.build();
三、解析響應內容
//創建 http 客戶端 HttpClientBuilder httpClientBuilder = HttpClients.custom(); CloseableHttpClient httpClient = httpClientBuilder.build(); //創建 請求 RequestBuilder requestBuilder = RequestBuilder.get().setUri("https://www.baidu.com/"); HttpUriRequest httpGet = requestBuilder.build(); //獲取響應對象 CloseableHttpResponse response = null; try { response = httpClient.execute(httpGet); //獲取響應狀態行,進而獲取響應狀態碼 int statusCode = response.getStatusLine().getStatusCode(); System.out.println("狀態碼:" + statusCode); //獲取響應的MIME類型 String contentMimeType = ContentType.getOrDefault(response.getEntity()).getMimeType(); System.out.println("媒體類型:" + contentMimeType); //獲取響應的內容,這里只演示簡單的文本內容,實際開發中並不總是這么簡單,后面詳細地講解 String bodyAsString = EntityUtils.toString(response.getEntity(),"UTF-8"); System.out.println("響應內容:" + bodyAsString); } catch (IOException e) { e.printStackTrace(); }finally { //關閉響應 if(null != response){ try { response.close(); } catch (IOException e) { e.printStackTrace(); } } //釋放連接 if(null != httpGet){ httpGet.abort(); } //關閉客戶端 if(null != httpClient){ try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } }
注:這里要記得關閉相關的資源,一般放在finally里面。