標籤:
最近在使用Apache的httpclient的時候,maven引用了最新版本4.3,發現Idea提示DefaultHttpClient等常用的類已經不推薦使用了,之前在使用4.2.3版本的時候,還沒有被deprecated。去看了下官方文檔,確實不推薦使用了,點擊此處詳情。
- DefaultHttpClient —> CloseableHttpClient
- HttpResponse —> CloseableHttpResponse
官方給出了新api的範例,如下。
Get方法:
CloseableHttpClient httpclient = HttpClients.createDefault(); HttpGet httpGet = new HttpGet("http://targethost/homepage"); CloseableHttpResponse response1 = httpclient.execute(httpGet); // The underlying HTTP connection is still held by the response object // to allow the response content to be streamed directly from the network socket. // In order to ensure correct deallocation of system resources // the user MUST either fully consume the response content or abort request // execution by calling CloseableHttpResponse#close(). //建立的http串連,仍舊被response1保持著,允許我們從網路socket中擷取返回的資料 //為了釋放資源,我們必須手動消耗掉response1或者取消串連(使用CloseableHttpResponse類的close方法) try { System.out.println(response1.getStatusLine()); HttpEntity entity1 = response1.getEntity(); // do something useful with the response body // and ensure it is fully consumed EntityUtils.consume(entity1); } finally { response1.close(); }
Post方法:
HttpPost httpPost = new HttpPost("http://targethost/login"); //拼接參數 List <NameValuePair> nvps = new ArrayList <NameValuePair>(); nvps.add(new BasicNameValuePair("username", "vip")); nvps.add(new BasicNameValuePair("password", "secret")); httpPost.setEntity(new UrlEncodedFormEntity(nvps)); CloseableHttpResponse response2 = httpclient.execute(httpPost); try { System.out.println(response2.getStatusLine()); HttpEntity entity2 = response2.getEntity(); // do something useful with the response body // and ensure it is fully consumed //消耗掉response EntityUtils.consume(entity2); } finally { response2.close(); }
再往下看HttpClients的源碼,具體的實現都在HttpClientBuilder的build方法中,有興趣的可以去apache看源碼。
/** * Creates {@link CloseableHttpClient} instance with default * configuration. */ public static CloseableHttpClient createDefault() { return HttpClientBuilder.create().build(); }
DefaultHttpClient is deprecated 【Api 棄用]】