最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中輕量級(jí)http開(kāi)發(fā)庫(kù)Unirest使用及實(shí)用技巧

 更新時(shí)間:2025年10月21日 10:01:52   作者:許于寶的博客  
Unirest for Java 是一個(gè)輕量級(jí)、易于使用的 HTTP 客戶(hù)端庫(kù),旨在簡(jiǎn)化 Java 應(yīng)用程序中的 HTTP 請(qǐng)求發(fā)送和響應(yīng)處理,本文詳細(xì)介紹它的主要特性、基本用法以及一些實(shí)用技巧,感興趣的朋友跟隨小編一起看看吧

Unirest for Java 是一個(gè)輕量級(jí)、易于使用的 HTTP 客戶(hù)端庫(kù),旨在簡(jiǎn)化 Java 應(yīng)用程序中的 HTTP 請(qǐng)求發(fā)送和響應(yīng)處理。它提供了簡(jiǎn)潔的鏈?zhǔn)?API,支持同步和異步請(qǐng)求,并且能夠輕松處理 JSON 等常見(jiàn)數(shù)據(jù)格式。下面我會(huì)詳細(xì)介紹它的主要特性、基本用法以及一些實(shí)用技巧。

下面是一個(gè)表格,匯總了 Unirest for Java 的主要特性:

特性維度說(shuō)明
設(shè)計(jì)理念提供簡(jiǎn)單易用的鏈?zhǔn)?API,降低 HTTP 客戶(hù)端開(kāi)發(fā)復(fù)雜度
依賴(lài)體積輕量級(jí),傳統(tǒng)依賴(lài)方式無(wú)需外部依賴(lài);Standalone 方式包含所有依賴(lài)
HTTP 方法支持 GET、POST、PUT、DELETE 等
請(qǐng)求類(lèi)型支持同步和異步請(qǐng)求
數(shù)據(jù)格式支持方便地處理 JSON(需選擇模塊,如 Gson 或 Jackson)
JSON 處理從 4.x 版本開(kāi)始,需顯式引入 Gson 或 Jackson 等 JSON 處理模塊
模塊化設(shè)計(jì)采用模塊化設(shè)計(jì),例如 JSON 處理可作為獨(dú)立模塊引入

?? 安裝與配置

在你的 Java 項(xiàng)目中使用 Unirest,通常只需要通過(guò) Maven 或 Gradle 添加依賴(lài)。

Maven 依賴(lài)
Unirest 提供了兩種主要的依賴(lài)引入方式:

  1. 傳統(tǒng)依賴(lài):需要項(xiàng)目自身已包含必要的依賴(lài)項(xiàng)(如 Apache HTTP Client 和 JSON 處理庫(kù))。
  2. Standalone 依賴(lài):包含了所有必須的依賴(lài),避免了潛在依賴(lài)沖突。
<!-- 方式一:傳統(tǒng)依賴(lài) -->
<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-java</artifactId>
    <version>3.14.1</version> <!-- 請(qǐng)注意版本更新 -->
</dependency>
<!-- 方式二:Standalone 依賴(lài)(推薦避免依賴(lài)沖突) -->
<dependency>
    <groupId>com.konghq</groupId>
    <artifactId>unirest-java</artifactId>
    <version>3.14.1</version>
    <classifier>standalone</classifier>
</dependency>

Gradle 依賴(lài)

// 傳統(tǒng)依賴(lài)
implementation 'com.konghq:unirest-java:3.14.1'
// 或者 Standalone 依賴(lài)
implementation 'com.konghq:unirest-java:3.14.1:standalone'

?? 關(guān)于 4.x 版本
Unirest 的 4.x 版本采用了更模塊化的設(shè)計(jì)。例如,JSON 處理功能需要單獨(dú)引入特定模塊(如 unirest-modules-gsonunirest-modules-jackson),并推薦使用 BOM(Bill of Materials)來(lái)管理依賴(lài)版本。建議訪問(wèn) Unirest Java 官方文檔GitHub 倉(cāng)庫(kù) 了解最新版本信息和升級(jí)指南。

?? 核心用法

Unirest 的核心設(shè)計(jì)圍繞著簡(jiǎn)潔的鏈?zhǔn)?API,讓你能夠流暢地構(gòu)建 HTTP 請(qǐng)求。

1. 發(fā)送 GET 請(qǐng)求

GET 請(qǐng)求通常用于從服務(wù)器獲取資源。Unirest 使得發(fā)送帶參數(shù)的 GET 請(qǐng)求非常方便。

import kong.unirest.HttpResponse;
import kong.unirest.JsonNode;
import kong.unirest.Unirest;
// 發(fā)送一個(gè)簡(jiǎn)單的 GET 請(qǐng)求
HttpResponse<String> response = Unirest.get("http://httpbin.org/get")
  .header("accept", "application/json") // 設(shè)置請(qǐng)求頭
  .queryString("apiKey", "123") // 添加查詢(xún)參數(shù)
  .asString(); // 指定期望的響應(yīng)體類(lèi)型
System.out.println(response.getStatus()); // 獲取狀態(tài)碼
System.out.println(response.getBody()); // 獲取響應(yīng)體
// 查詢(xún)參數(shù)可以通過(guò)多種方式添加
// 逐個(gè)添加
Unirest.get("http://localhost")
                .queryString("fruit", "apple")
                .queryString("droid", "R2D2")
                .asString();
// 請(qǐng)求結(jié)果為 http://localhost?fruit=apple&droid=R2D2
// 使用集合添加
Unirest.get("http://localhost")
        .queryString("fruit", Arrays.asList("apple", "orange"))
        .queryString(ImmutableMap.of("droid", "R2D2", "beatle", "Ringo"))
        .asString();
// 請(qǐng)求結(jié)果為 http://localhost?fruit=apple&fruit=orange&droid=R2D2&beatle=Ringo

2. 發(fā)送 POST 請(qǐng)求

POST 請(qǐng)求常用于向服務(wù)器提交數(shù)據(jù)。Unirest 支持多種方式提交數(shù)據(jù)。

// 提交表單數(shù)據(jù)
HttpResponse<String> response = Unirest.post("http://httpbin.org/post")
  .header("accept", "application/json")
  .field("param1", "value1") // 添加表單字段
  .field("param2", "value2")
  .asString();
// 提交 JSON 數(shù)據(jù)(需要相應(yīng)的 JSON 處理庫(kù),如 Gson)
HttpResponse<JsonNode> jsonResponse = Unirest.post("http://localhost/post")
      .header("accept", "application/json")
      .header("Content-Type", "application/json")
      .body("{\"name\": \"Gary\", \"age\": 30}") // 直接傳遞 JSON 字符串
      // 或者傳遞一個(gè)可序列化的 Java 對(duì)象
      // .body(new SomeUserObject("Gary")) 
      .asJson(); // 解析響應(yīng)為 JsonNode
// 提交原始字符串?dāng)?shù)據(jù)
Unirest.post("http://localhost")
                .body("This is the entire body")
                .asEmpty();

3. 使用路徑參數(shù)和設(shè)置基礎(chǔ) URL

路徑參數(shù) (Route Parameters) 可以方便地動(dòng)態(tài)設(shè)置 URL 中的部分:

// 使用占位符 {fruit},并通過(guò) routeParam 設(shè)置其值
Unirest.get("http://localhost/{fruit}")
     .routeParam("fruit", "apple") // 動(dòng)態(tài)替換 {fruit} 為 apple
     .asString();
// 請(qǐng)求結(jié)果為 http://localhost/apple
// 所有參數(shù)值都會(huì)自動(dòng)進(jìn)行 URL 編碼

設(shè)置基礎(chǔ) URL (Default Base URL) 可以簡(jiǎn)化重復(fù)的域名部分:

// 配置默認(rèn)基礎(chǔ) URL
Unirest.config().defaultBaseUrl("http://homestar.com");
// 后續(xù)請(qǐng)求只需指定路徑
Unirest.get("/runner").asString(); // 實(shí)際請(qǐng)求 http://homestar.com/runner

4. 設(shè)置請(qǐng)求頭與身份認(rèn)證

// 設(shè)置自定義請(qǐng)求頭
Unirest.get("http://localhost")
            .header("Accept", "application/json")
            .header("x-custom-header", "hello")
            .asString();
// 基本身份認(rèn)證 (Basic Authentication)
Unirest.get("http://localhost")
            .basicAuth("user", "password1!") // 自動(dòng)進(jìn)行 Base64 編碼
            .asString();
// 此調(diào)用會(huì)添加請(qǐng)求頭 "Authorization: Basic dXNlcjpwYXNzd29yZDEh"
// 請(qǐng)注意,涉及敏感信息時(shí)務(wù)必使用 HTTPS

5. 處理響應(yīng)

.asXXX() 方法(如 asString, asJson)會(huì)阻塞當(dāng)前線程直到收到 HTTP 響應(yīng)。HttpResponse 對(duì)象包含了響應(yīng)的詳細(xì)信息:

HttpResponse<String> response = Unirest.get("http://httpbin.org/get").asString();
int status = response.getStatus(); // 獲取狀態(tài)碼,例如 200
String body = response.getBody(); // 獲取響應(yīng)體字符串
Headers headers = response.getHeaders(); // 獲取響應(yīng)頭信息
String contentType = response.getHeaders().getFirst("Content-Type"); // 獲取指定響應(yīng)頭

6. 發(fā)送 PUT 和 DELETE 請(qǐng)求

// 發(fā)送 PUT 請(qǐng)求
HttpResponse<String> putResponse = Unirest.put("http://httpbin.org/put")
  .header("accept", "application/json")
  .field("param1", "value1")
  .field("param2", "value2")
  .asString();
// 發(fā)送 DELETE 請(qǐng)求
HttpResponse<String> deleteResponse = Unirest.delete("http://httpbin.org/delete")
  .header("accept", "application/json")
  .queryString("apiKey", "123")
  .asString();

?? 高級(jí)特性與配置

異步請(qǐng)求

Unirest 支持異步發(fā)送請(qǐng)求,這對(duì)于提高應(yīng)用程序的吞吐量和響應(yīng)性非常有用。

// 使用 Future 處理異步請(qǐng)求
Future<HttpResponse<JsonNode>> future = Unirest.post("http://localhost/post")
      .header("accept", "application/json")
      .field("param1", "value1")
      .asJsonAsync(new Callback<JsonNode>() { // 指定回調(diào)函數(shù)
          @Override
          public void completed(HttpResponse<JsonNode> response) {
               // 請(qǐng)求成功完成時(shí)調(diào)用
               int code = response.getStatus();
               JsonNode body = response.getBody();
               Headers headers = response.getHeaders();
          }
          @Override
          public void failed(UnirestException e) {
               // 請(qǐng)求失敗時(shí)調(diào)用
               System.out.println("The request has failed: " + e.getMessage());
          }
          @Override
          public void cancelled() {
               // 請(qǐng)求被取消時(shí)調(diào)用
               System.out.println("The request has been cancelled");
          }
      });
// 在未來(lái)某個(gè)時(shí)刻,你可以使用 future.get() 獲取結(jié)果(這會(huì)阻塞)

文件上傳

Unirest 簡(jiǎn)化了文件上傳的過(guò)程。

// 分塊上傳大文件(示例框架,需完善)
try {
    String filePath = "path/to/large/file.zip";
    int chunkSize = 1024 * 1024; // 1MB 每塊
    int totalChunks = (int) Math.ceil(new File(filePath).length() / (double) chunkSize);
    for (int chunkNumber = 0; chunkNumber < totalChunks; chunkNumber++) {
        byte[] chunkData = getChunkData(filePath, chunkNumber, chunkSize); // 需要實(shí)現(xiàn)讀取文件塊的方法
        HttpResponse<String> chunkResponse = Unirest.post("http://example.com/upload")
                .field("fileChunk", chunkData)
                .field("chunkNumber", chunkNumber)
                .field("totalChunks", totalChunks)
                .asString();
        // 處理每個(gè)分塊的上傳響應(yīng)
    }
    // 所有分塊上傳完成后,通知服務(wù)器合并
    HttpResponse<String> mergeResponse = Unirest.post("http://example.com/merge")
            .field("fileName", "file.zip")
            .field("totalChunks", totalChunks)
            .asString();
} catch (Exception e) {
    e.printStackTrace();
}

配置 Unirest

Unirest 提供了一些全局配置選項(xiàng),用于設(shè)置連接超時(shí)、重試策略等。

Unirest.config()
    .connectTimeout(30000) // 設(shè)置連接超時(shí)為30秒
    .enableCookieManagement(true) // 啟用 Cookie 管理
    .verifySsl(false) // 是否驗(yàn)證 SSL 證書(shū)(生產(chǎn)環(huán)境應(yīng)設(shè)為 true)
    .automaticRetries(true) // 啟用自動(dòng)重試
    .defaultBaseUrl("http://homestar.com"); // 設(shè)置默認(rèn)基礎(chǔ) URL

// 注意:在 JavaFX 或長(zhǎng)時(shí)間運(yùn)行的應(yīng)用程序中,在程序退出時(shí)關(guān)閉 Unirest 實(shí)例是一個(gè)好習(xí)慣
// Unirest.shutdown();

?? 實(shí)踐建議

  1. 資源清理:如果你的應(yīng)用程序會(huì)長(zhǎng)時(shí)間運(yùn)行或多次創(chuàng)建 Unirest 實(shí)例,在程序退出或不再需要時(shí),調(diào)用 Unirest.shutdown() 來(lái)釋放底層連接管理器資源,避免內(nèi)存泄漏。
  2. HTTPS 安全:在生產(chǎn)環(huán)境中,務(wù)必啟用 SSL 證書(shū)驗(yàn)證Unirest.config().verifySsl(true)),并使用 HTTPS 協(xié)議傳輸敏感信息。僅在開(kāi)發(fā)測(cè)試時(shí)考慮禁用 SSL 驗(yàn)證。
  3. 異常處理:網(wǎng)絡(luò)請(qǐng)求充滿(mǎn)不確定性,務(wù)必使用 try-catch 塊妥善處理 UnirestException 等異常,并根據(jù)需要檢查 HTTP 狀態(tài)碼。
  4. 依賴(lài)管理
    • 對(duì)于新項(xiàng)目,建議評(píng)估使用 4.x 版本,并根據(jù)需要引入 JSON 模塊。
    • 使用 standalone 分類(lèi)器可以減少依賴(lài)沖突的可能性。
    • 如果項(xiàng)目本身已管理了 HTTP 客戶(hù)端和 JSON 庫(kù),則可使用傳統(tǒng)依賴(lài)方式。
  5. JSON 處理:在 3.x 版本中,Unirest 通常默認(rèn)集成 Gson。在 4.x 版本中,你需要明確選擇并引入 unirest-modules-gsonunirest-modules-jackson 等模塊。

?? 總結(jié)

Unirest for Java 通過(guò)其鏈?zhǔn)?API 和合理的默認(rèn)配置,顯著降低了在 Java 應(yīng)用中處理 HTTP 請(qǐng)求的復(fù)雜度。無(wú)論是簡(jiǎn)單的 REST API 調(diào)用還是復(fù)雜的文件上傳場(chǎng)景,它都能提供清晰、靈活的解決方案。

選擇 Unirest,意味著你在追求開(kāi)發(fā)效率和應(yīng)用性能之間找到一個(gè)不錯(cuò)的平衡點(diǎn)。當(dāng)然,對(duì)于極度追求性能或者需要精細(xì)控制 HTTP 行為的場(chǎng)景,你可能仍需考慮更底層的庫(kù)(如 Apache HttpClient 或 OkHttp)。但對(duì)于大多數(shù)日常開(kāi)發(fā)任務(wù)而言,Unirest 無(wú)疑是一個(gè)“灰常”優(yōu)秀的工具。

到此這篇關(guān)于Java中輕量級(jí)http開(kāi)發(fā)庫(kù)Unirest使用及實(shí)用技巧的文章就介紹到這了,更多相關(guān)java http開(kāi)發(fā)庫(kù)unirest內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決

    使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決

    本文主要介紹了使用ServletUtil.write方法下載接口文件中文亂碼問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Maven構(gòu)建SpringBoot集成MyBatis過(guò)程

    Maven構(gòu)建SpringBoot集成MyBatis過(guò)程

    文章介紹了如何使用Maven創(chuàng)建一個(gè)Spring Boot項(xiàng)目,并集成MyBatis,首先,配置Maven環(huán)境,然后在pom.xml中添加MyBatis依賴(lài),配置數(shù)據(jù)庫(kù)連接信息,最后生成Mapper XML文件和DAO層代碼
    2024-11-11
  • Java讀取文件的簡(jiǎn)單實(shí)現(xiàn)方法

    Java讀取文件的簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要介紹了Java讀取文件的簡(jiǎn)單實(shí)現(xiàn)方法,通過(guò)一個(gè)讀取txt格式的log文件為例,詳細(xì)的講述了Java讀取文件的方法及原理,需要的朋友可以參考下
    2014-09-09
  • Java容器ArrayList原理解析

    Java容器ArrayList原理解析

    這篇文章主要介紹了Java容器ArrayList原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java 中的字符串替換方法之replace, replaceAll 和 replaceFirst示例詳解

    Java 中的字符串替換方法之replace, replaceAll 和 rep

    在Java中,字符串的替換是一種常見(jiàn)的操作,特別是在處理文本和格式化輸出時(shí),本文將詳細(xì)討論這些方法的用法、區(qū)別以及示例,感興趣的朋友一起看看吧
    2024-12-12
  • java如何連續(xù)執(zhí)行多條cmd命令

    java如何連續(xù)執(zhí)行多條cmd命令

    這篇文章主要介紹了java如何連續(xù)執(zhí)行多條cmd命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • springboot?vue接口測(cè)試HutoolUtil?TreeUtil處理樹(shù)形結(jié)構(gòu)

    springboot?vue接口測(cè)試HutoolUtil?TreeUtil處理樹(shù)形結(jié)構(gòu)

    這篇文章主要介紹了springboot?vue接口測(cè)試HutoolUtil?TreeUtil處理樹(shù)形結(jié)構(gòu),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • java中g(shù)radle項(xiàng)目報(bào)錯(cuò)org.gradle?.api.plugins.MavenPlugin解決辦法

    java中g(shù)radle項(xiàng)目報(bào)錯(cuò)org.gradle?.api.plugins.MavenPlugin解決辦法

    在使用Gradle時(shí)開(kāi)發(fā)者可能會(huì)遇到org.gradle?.api.plugins.MavenPlugin報(bào)錯(cuò)提醒,這篇文章主要給大家介紹了關(guān)于java中g(shù)radle項(xiàng)目報(bào)錯(cuò)org.gradle?.api.plugins.MavenPlugin的解決辦法,需要的朋友可以參考下
    2023-12-12
  • 解決java文件流處理異常 mark/reset not supported問(wèn)題

    解決java文件流處理異常 mark/reset not supported問(wèn)題

    這篇文章主要介紹了解決java文件流處理異常 mark/reset not supported問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • SpringBoot注冊(cè)web組件的實(shí)現(xiàn)方式

    SpringBoot注冊(cè)web組件的實(shí)現(xiàn)方式

    Servlet是Java Web應(yīng)用程序的基礎(chǔ),它提供了處理客戶(hù)端請(qǐng)求的機(jī)制,Servlet三大組件是指Servlet、Filter和Listener,它們是Java Web應(yīng)用程序的核心組件,本文將給大家介紹一下SpringBoot注冊(cè)web組件的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

濮阳市| 遂川县| 商城县| 藁城市| 定州市| 富裕县| 吉水县| 孙吴县| 大同市| 北川| 江华| 崇左市| 南溪县| 泰顺县| 景泰县| 阜康市| 宜黄县| 轮台县| 汝阳县| 都昌县| 贡嘎县| 石首市| 巴里| 开封市| 芷江| 三门县| 礼泉县| 漠河县| 易门县| 长治县| 徐闻县| 丁青县| 勃利县| 淄博市| 道孚县| 天水市| 大丰市| 黎川县| 遂溪县| 竹山县| 砚山县|