1. 程式人生 > 實用技巧 >Hutool之Http工具類使用

Hutool之Http工具類使用

最早接觸Hutool這個集常用工具類為一體的框架工具包是在2018年的時候(酒店業務需要呼叫第三方門鎖API)。
而後19年因為業務接觸到Bmob雲,開始寫對Bmob雲的API,於是便有了這篇文章Hutool工具類之HttpUtil使用Https

最近針對業務,再次用到這個。這次涉及到不同單個服務之間的呼叫,通訊方式還是HTTP為主。

針對最近常用的,做了一些總結。

二、應用場景

  • (1)呼叫第三方服務API(第三方服務通常支援HTTP、WebService,一般HTTP比較多);
  • (2)單體應用服務之間的服務呼叫;
  • (3)分散式服務之間的服務呼叫;

二、HttpUtil

官方文件地址:
https://hutool.cn/docs/#/http/Http%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%B7%A5%E5%85%B7%E7%B1%BB-HttpUtil

大家可以做個參考。

1.Get請求

String apiData = HttpUtil.get(url);

String apiData = HttpUtil.get(url,timeout);

String apiData = HttpUtil.get(url,paramMap);

String apiData = HttpUtil.get(url,paramMap,timeout);

String apiData = HttpUtil.createGet(url)
               .execute().body();

2.Post請求

String apiData = HttpUtil.post(url,body);

String apiData 
= HttpUtil.post(url,body,timeout); String apiData =HttpUtil.post(url,paramMap,timeout); String apiData =HttpUtil.post(url,paramMap); String apiData = HttpUtil.createPost(url) .body(reqDto.toString()) .execute().body();

至於apiData如何由String轉成JSON格式化,可通過Hutools自帶的JSONObject物件或者JSONArray物件進行轉換。

例子如下(以我呼叫部落格園API為例):

private String getToken() {
       String url = "https://api.cnblogs.com/token";//請求介面地址
       Map<String, Object> paramMap = new HashMap<>();
       paramMap.put("client_id", ClientId);
       paramMap.put("client_secret", ClientSecret);
       paramMap.put("grant_type", "client_credentials");
       String result = HttpUtil.post(url, paramMap);

       JSONObject jsonObject = new JSONObject(result);

       return "Bearer " + jsonObject.getStr("access_token");

   }

上面是針對單一JSONObject物件,下面還有針對陣列是如何拿到具體的元素(這裡是我對接部落格園API程式碼,拿到部落格園各個博主的名稱,然後根據名稱去匹配URL,實現批量資料抓取):

try {

           Integer pageMaxSize = 200;

           Integer pageSize = 30;

           for (int pageParentIndex = 0; pageParentIndex < pageMaxSize; pageParentIndex++) {
            
               String homeApiPageData = cnBlogApiService.getSiteHomePostList(pageParentIndex, pageSize);

               JSONArray getHomeApiPageData = new JSONArray(homeApiPageData);


               if (getHomeApiPageData.size() > 0) {

                   for (int i = 1; i < getHomeApiPageData.size(); i++) {


                       JSONObject jsonObject = getHomeApiPageData.getJSONObject(i);

                       this.executeCnBlogsImportDataTask(jsonObject.getStr("BlogApp"));
                   }

               }
           }

           return ResponseBaseDTO.createSuccResp(1);
       } catch (Exception e) {
           logger.error("/cnblogs/singleImport", e);
           return ResponseBaseDTO.createFailResp(e.getMessage());
       }