天天看點

java HTTP請求 DefaultHttpClient is deprecated

最近在使用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();
    }
           
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();
    }
           
/**
    * Creates {@link CloseableHttpClient} instance with default
    * configuration.
    */
    public static CloseableHttpClient createDefault() {
        return HttpClientBuilder.create().build();
    }