Java中關於httpClient的用法總結

Java中關於httpClient的用法總結

httpClient是apache開發的一個用於http傳輸的工具包,用起來非常方便,封裝了底層協議,提供了一些簡單可用的api以供調用。

快速開始:

  1. 創建一個http客戶端:

    private static CloseableHttpClient client = HttpClients.createDefault();
    
  2. 創建一個httpPost用於模擬http的post請求:

    HttpPost httpPost = new HttpPost("http://localhost:8080/getDetails");
    RequestConfig requestConfig = RequestConfig.custom()
            .setSocketTimeout(1000)
            .setConnectTimeout(1000)
            .build();
    httpPost.setConfig(requestConfig);
    httpPost.addHeader("Content-Type", "application/json");
    //一個實體類,它從字符串中獲得內容並填充到實體類中,json代表json字符串
    StringEntity entity = new StringEntity(json,ContentType.APPLICATION_JSON);
    httpPost.setEntity(entity);
    
  3. 創建一個HttpResponse用來接收響應:

    //這裏用CloseableHttpResponse而不用HttpResponse是因爲前者繼承了Closeable接口
    //在後面會調用其繼承的close()方法來關閉response
    CloseableHttpResponse response = null;
    
  4. 執行http請求:

    response = client.execute(httpPost);
    
  5. 獲得響應數據並處理數據:

    //獲得響應狀態行
    StatusLine statusLine = response.getStatusLine();
    if (statusLine != null){
        int code = statusLine.getStatusCode();
        //請求成功
        if(code == 200) {
            //這裏不用EntityUtils.toString(final HttpEntity entity)方法的原因:
            //官方api強烈建議禁用此方法:除非entity來自受信任的網站並且實體內容長度有限
            //至於爲什麼這樣,本人還沒有研究清楚,可能是EntityUtils.toString方法裏面
            //直接利用entity.getContent()方法獲得inputStream,然後將inputStream關閉,
            //導致如果entity不是repeatable的,則就不能再次訪問entity的內容
    //      String rev = EntityUtils.toString(response.getEntity());
            HttpEntity responseEntity = response.getEntity();
            if (responseEntity != null){
                //讀取響應內容
                String rev = JsonUtil.readToString(responseEntity.getContent(),"utf-8");
                //關閉inputStream流
                EntityUtils.consume(responseEntity);
                //將響應轉換成json格式
                JSONObject jsonObject = JSON.parseObject(rev);
                if (jsonObject != null && StringUtils.equals(String.valueOf(jsonObject.get("code")), "200")){
                    logger.info("【" + systemId + "】" + "系統應答結果:" + String.valueOf(jsonObject.get("msg")));
                    result = true;
                }else if (jsonObject != null)
                    logger.error("【" + systemId + "】" + "系統應答結果:" + String.valueOf(jsonObject.get("msg")));
            }
        }
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章