Unirest-Java:Java發起GET、POST、PUT、DELETE、文件上傳,文件下載工具類介紹

一、簡介

Unirest-Java是一個輕量級的HTTP客戶端庫,用于在Java應用程序中發送HTTP請求。

它提供了簡單易用的API,可以方便地處理GET、POST、PUT、DELETE等HTTP方法。

Unirest-Java支持異步和同步請求,可以輕松地與JSON、XML等數據格式進行交互。此外,它還支持文件上傳和下載、Cookie管理等功能。

總之,Unirest-Java是一個功能強大且易于使用的HTTP客戶端庫,適用于各種Java應用程序。

官網:http://kong.github.io/unirest-java/

在這里插入圖片描述

二、安裝

1、Java8

 		<dependency><groupId>com.konghq</groupId><artifactId>unirest-java</artifactId><version>3.14.1</version></dependency>

1、Java11以上

<dependencyManagement><dependencies><!-- https://mvnrepository.com/artifact/com.konghq/unirest-java-bom --><dependency><groupId>com.konghq</groupId><artifactId>unirest-java-bom</artifactId><version>4.0.12</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement><dependencies>
<!-- https://mvnrepository.com/artifact/com.konghq/unirest-java-core -->
<dependency><groupId>com.konghq</groupId><artifactId>unirest-java-core</artifactId>
</dependency><!-- pick a JSON module if you want to parse JSON include one of these: -->
<!-- Google GSON -->
<dependency><groupId>com.konghq</groupId><artifactId>unirest-object-mappers-gson</artifactId>
</dependency><!-- OR maybe you like Jackson better? -->
<dependency><groupId>com.konghq</groupId><artifactId>unirest-objectmapper-jackson</artifactId>
</dependency>
</dependencies>

三、GET請求


使用Unirest庫發送一個HTTP GET請求到"http://localhost/{fruit}“,其中”{fruit}“是一個路由參數,其值為"apple”。然后,它將響應轉換為字符串。

Unirest.get("http://localhost/{fruit}").routeParam("fruit", "apple").asString();

使用Unirest庫發送一個HTTP GET請求到"http://localhost",并添加了兩個查詢參數:“fruit"的值為"apple”,“droid"的值為"R2D2”。最后,將響應轉換為字符串。

Unirest.get("http://localhost").queryString("fruit", "apple").queryString("droid", "R2D2").asString();

使用Unirest庫發送一個HTTP GET請求到"http://localhost",并添加了兩個查詢參數:"fruit"的值為一個包含"apple"和"orange"的列表,另一個查詢參數是一個不可變的映射(ImmutableMap),其中包含了"droid"和"beatle"兩個鍵值對。最后,將響應轉換為字符串。

Unirest.get("http://localhost").queryString("fruit", Arrays.asList("apple", "orange")).queryString(ImmutableMap.of("droid", "R2D2", "beatle", "Ringo")).asString();

使用Unirest庫發送一個HTTP GET請求到"http://localhost",并設置了兩個請求頭:“Accept"設置為"application/json”,表示期望服務器返回JSON格式的數據;“x-custom-header"設置為"hello”,表示自定義了一個名為"x-custom-header"的請求頭。最后,將響應轉換為字符串。

Unirest.get("http://localhost").header("Accept", "application/json").header("x-custom-header", "hello").asString();

使用Unirest庫發送一個HTTP GET請求到"http://localhost",并設置了基本的認證信息。其中,"user"和"password1!"分別表示用戶名和密碼。

最后,將響應轉換為字符串。

Unirest.get("http://localhost").basicAuth("user", "password1!").asString();

使用Unirest庫發送一個HTTP GET請求到"https://somewhere/dogs",并將響應結果轉換為PagedList類型。

具體來說,代碼中的.asPaged()方法用于處理分頁數據。它接受兩個參數:

r -> r.asObject(Doggos.class):這是一個Lambda表達式,用于將響應結果轉換為Doggos類型的對象列表。其中,r表示響應結果,r.asObject(Doggos.class)表示將響應結果轉換為Doggos類型的對象。

r -> r.getHeaders().getFirst(“nextPage”):這也是一個Lambda表達式,用于獲取下一頁的鏈接。其中,r表示響應結果,r.getHeaders().getFirst(“nextPage”)表示從響應頭中獲取名為"nextPage"的第一個值,即下一頁的鏈接。

通過這兩個Lambda表達式,代碼可以自動處理分頁數據,并將每一頁的數據轉換為Doggos類型的對象列表。

最終,結果將被存儲在名為result的PagedList變量中。

PagedList<Doggos> result =  Unirest.get("https://somewhere/dogs").asPaged(r -> r.asObject(Doggos.class),r -> r.getHeaders().getFirst("nextPage"));

使用Unirest庫發送一個HTTP GET請求到"https://some.custom.secured.place.com",并獲取響應結果的字符串表示。

首先,Unirest.config()用于配置Unirest客戶端的行為。在這個例子中,它設置了客戶端證書存儲路徑為"/path/mykeystore.p12",并指定了密碼為"password1!"。這意味著在發送請求時,客戶端將使用指定的證書進行身份驗證。

然后,Unirest.get(“https://some.custom.secured.place.com”)用于創建一個GET請求,目標URL為"https://some.custom.secured.place.com"。

最后,.asString()方法用于將響應結果轉換為字符串表示。這樣,你可以對返回的數據進行處理或分析。

Unirest.config().clientCertificateStore("/path/mykeystore.p12", "password1!");Unirest.get("https://some.custom.secured.place.com").asString();

代理
有時您需要通過代理進行隧道傳輸。Unirest 可以配置為執行此操作。請注意,除非您要將其構建到 URL 本身中,否則無法按請求配置經過身份驗證的代理。

// Configure with authentication:Unirest.config().proxy("proxy.com", 7777, "username", "password1!");// or withoutUnirest.config().proxy("proxy.com", 7777);// or pass it in the request. This will override any proxy done in the config// currently only unauthenticated proxies workUnirest.get(MockServer.GET).proxy("proxy.com", 7777).asString();

四、POST請求

使用Unirest庫發送一個HTTP POST請求到"http://localhost/post這段代碼是使用Unirest庫發送一個HTTP POST請求到"http://localhost/post",并獲取響應結果的JsonNode表示。

具體來說,代碼執行了以下操作:

使用Unirest.post()方法創建一個POST請求,目標URL為"http://localhost/post"。
通過.header(“accept”, “application/json”)設置請求頭中的"Accept"字段為"application/json",表示期望服務器返回JSON格式的數據。
通過.queryString(“apiKey”, “123”)添加查詢參數"apiKey",其值為"123"。
通過.field(“parameter”, “value”)和.field(“firstname”, “Gary”)分別添加兩個表單字段,分別為"parameter"和"firstname",它們的值分別為"value"和"Gary"。
最后,通過.asJson()方法將響應結果轉換為JsonNode類型,并將其賦值給變量response。

HttpResponse<JsonNode> response = Unirest.post("http://localhost/post").header("accept", "application/json").queryString("apiKey", "123").field("parameter", "value").field("firstname", "Gary").asJson();

使用Unirest庫發送一個HTTP POST請求到"http://localhost",并這段代碼是使用Unirest庫發送一個HTTP POST請求到"http://localhost",并設置請求體的內容為"This is the entire body"。最后通過.asEmpty()方法指定響應結果的處理方式為空處理。

具體來說,代碼執行了以下操作:

使用Unirest.post(“http://localhost”)創建一個POST請求,目標URL為"http://localhost"。
通過.body(“This is the entire body”)設置請求體的內容為"This is the entire body"。
最后通過.asEmpty()方法指定響應結果的處理方式為空處理。這意味著在接收到響應后,不會對響應內容進行任何處理或解析。

Unirest.post("http://localhost").body("This is the entire body").asEmpty();

使用Unirest庫發送一個HTTP POST請求到"http://localhost"。它設置了請求頭中的"Content-Type"為"application/json",表示請求體中的數據類型是JSON格式。然后,它將一個名為"Bob"的SomeUserObject對象作為請求體發送出去。最后,通過調用.asEmpty()方法指定響應結果的處理方式為空處理,即不對響應內容進行任何處理或解析。

Unirest.post("http://localhost").header("Content-Type", "application/json").body(new SomeUserObject("Bob")).asEmpty();

使用Unirest庫發送一個JSON Patch請求。具體來說,它執行了以下操作:

向"http://localhost"發送一個JSON Patch請求。
在"/fruits/-“路徑下添加一個名為"Apple"的元素。
從”/bugs"路徑下移除元素。
將"/lastname"路徑下的值替換為"Flintstone"。
測試"/firstname"路徑下的值是否等于"Fred"。
將"/old/location"路徑下的元素移動到"/new/location"路徑下。
將"/original/location"路徑下的元素復制到"/new/location"路徑下。
將結果以JSON格式返回。

Unirest.jsonPatch("http://localhost").add("/fruits/-", "Apple").remove("/bugs").replace("/lastname", "Flintstone").test("/firstname", "Fred").move("/old/location", "/new/location").copy("/original/location", "/new/location").asJson();

使用Unirest庫發送一個POST請求到"http://localhost"。它向該URL發送兩個字段,一個是"fruit",值為"apple",另一個是"droid",值為"R2D2"。最后,它調用asEmpty()方法來發送請求并返回一個空的響應。

Unirest.post("http://localhost").field("fruit", "apple").field("droid", "R2D2").asEmpty();

五、PUT請求

HttpResponse<JsonNode> response = Unirest.put(url).header("Content-Type", "application/json").body(json).asJson();

六、DELETE請求

try {HttpResponse<String> response = Unirest.delete(url).asString();System.out.println("Status code: " + response.getStatus());System.out.println("Response body: " + response.getBody());} catch (UnirestException e) {e.printStackTrace();}

七、文件上傳

Unirest.post("http://localhost").field("upload", new File("/MyFile.zip")).asEmpty();

對于大文件,您可能需要使用 InputStream。如果需要,請為其傳遞文件名。 我們在這里使用 FileInputStream,但它實際上可以是任何類型的 InputStream。

InputStream file = new FileInputStream(new File("/MyFile.zip"));Unirest.post("http://localhost").field("upload", file, "MyFile.zip").asEmpty();

上傳進度監控
如果要上傳大文件,則可能需要向用戶提供一些進度條時間。您可以通過提供 ProgresMonitor 來監視此進度。

Unirest.post("http://localhost").field("upload", new File("/MyFile.zip")).uploadMonitor((field, fileName, bytesWritten, totalBytes) -> {updateProgressBarWithBytesLeft(totalBytes - bytesWritten);}).asEmpty();

異步請求
有時,大多數時候,你希望你的應用程序是異步的而不是阻塞的,Unirest 在 Java 中使用匿名回調或直接方法放置來支持這一點。所有請求類型還支持異步版本。

CompletableFuture<HttpResponse<JsonNode>> future = Unirest.post("http://localhost/post").header("accept", "application/json").field("param1", "value1").field("param2", "value2").asJsonAsync(response -> {int code = response.getStatus();JsonNode body = response.getBody();});

八、文件下載

有時,您只想下載文件,或者將響應正文捕獲到文件中。Unirest 可以兩者兼而有之。只需告訴 Unirest 您要將文件放在哪里即可。

File result = Unirest.get("http://some.file.location/file.zip").asFile("/disk/location/file.zip").getBody();

下載進度監控
如果要上傳大文件,則可能需要向用戶提供一些進度條時間。您可以通過提供 ProgresMonitor 來監視此進度。

Unirest.get("http://localhost").downLoadMonitor((b, fileName, bytesWritten, totalBytes) -> {updateProgressBarWithBytesLeft(totalBytes - bytesWritten);}).asFile("/disk/location/file.zip");

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207082.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207082.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

最優化方法復習——線性規劃之對偶問題

一、線性規劃對偶問題定義 原問題&#xff1a; 對偶問題&#xff1a; &#xff08;1&#xff09;若一個模型為目標求 “極大”&#xff0c;約束為“小于等于” 的不等式&#xff0c;則它的對偶模型為目標求“極小”&#xff0c;約束是“大于等于”的不等式。即“Max&#xff0…

2024年甘肅省職業院校技能大賽信息安全管理與評估三階段理論樣題一

2024年甘肅省職業院校技能大賽高職學生組電子與信息大類信息安全管理與評估賽項樣題一 第六部分 理論技能與職業素養&#xff08;100 分&#xff09; 【注意事項】 1.該部分答題時長包含在第三階段競賽時長內&#xff0c;請在臨近競賽結束前提交。 2.參賽團隊可根據自身情況…

數據庫系統概論復習資料

數據庫系統概論考試需知 一、分值分布 1、判斷題&#xff08;10分&#xff09; 1分一個 2、填空題&#xff08;20分&#xff09; 2分一個 3、選擇題&#xff08;20分&#xff09; 2分一個 4、分析題&#xff08;30分&#xff09; 第一題10分&#xff0c;第二題…

如何設置echart圖表在vue頁面屏幕比例縮放自適應問題

問題&#xff1a;頁面的echart圖表在瀏覽器縮放屏幕比例時無法隨著屏幕的比例自動改變大小 解決方式&#xff1a; 可以通過監聽窗口的 resize 事件&#xff0c;并在事件回調函數中重新調整圖表的大小。 <template><div ref"chartContainer" style"w…

Enterprise Architect 12版本使用教程

Enterprise Architect 12版本使用教程 1.下載安裝Enterprise Architect 122.Enterprise Architect原始DDL模板配置及存在的問題1.DDL Column Definition原始模板&#xff08;沒有default值&#xff1a;可忽略&#xff09;2.DDL Data Type原始模板&#xff08;timestamp等時間字…

Apollo新版本Beta自動駕駛技術沙龍參會體驗有感—百度自動駕駛開源框架

在繁忙的都市生活中&#xff0c;我們時常對未來的科技發展充滿了好奇和期待。而近日&#xff0c;我有幸參加了一場引領科技潮流的線下技術沙龍&#xff0c;主題便是探索自動駕駛的魅力——一個讓我們身臨其境感受創新、了解技術巨擘的機會。 在12月2日我有幸參加了Apollo新版本…

智能優化算法應用:基于沙貓群算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于沙貓群算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于沙貓群算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.沙貓群算法4.實驗參數設定5.算法結果6.參考文獻7.…

kotlin協程反編譯java學習原理

前情提要 GlobalScope.launch(Dispatchers.Main) { // 默認是Default異步 // 1.從當前協程體作用域Dispatchers.Main 協程依附的線程 到 掛起點 掛起函數 到 執行 請求耗時操作 而 切換到 IO異步線程 // 2.IO異步線程執行完成后&#xff0c;開始恢復&#xff0c;當前作…

modbus轉profinet網關解決plc插槽號不夠用的情況

PLC作為常用的控制設備之一&#xff0c;其插槽號有時會限制外部設備的連接數量。然而&#xff0c;通過使用modbus轉profinet網關&#xff0c;可以解決這一問題。這種設備能夠將modbus協議轉換為profinet協議&#xff0c;實現PLC與更多外部設備的連接。 modbus轉profinet網關還具…

游戲盾的防御原理以及為什么程序類型更適合接入游戲盾。

游戲盾是一種專門用于游戲服務器的安全防護服務&#xff0c;旨在抵御各種網絡攻擊。它的原理主要包括以下幾個方面&#xff1a; 流量清洗和過濾&#xff1a;游戲盾會對進入游戲服務器的流量進行實時監測、分析和過濾。它通過識別惡意流量和攻擊流量&#xff0c;過濾掉其中的攻擊…

瀏覽器渲染頁面的過程以及原理

什么是瀏覽器渲染 簡單來說&#xff0c;就是將HTML字符串 —> 像素信息 渲染時間點 瀏覽器什么時候開始渲染&#xff1f; 網絡線程發送請求&#xff0c;取回HTML封裝為渲染任務并將其傳遞給渲染主線程的消息隊列。 問題&#xff1a;只取回HTML嗎&#xff1f;那CSS和JS呢&am…

面試經典150題(1-2)

leetcode 150道題 計劃花兩個月時候刷完&#xff0c;今天完成了兩道(1-2)150&#xff1a; &#xff08;88. 合并兩個有序數組&#xff09;題目描述&#xff1a; 給你兩個按 非遞減順序 排列的整數數組 nums1 和 nums2&#xff0c;另有兩個整數 m 和 n &#xff0c;分別表示 n…

元宇宙vr黨建云上實景展館擴大黨的影響力

隨著科技的飛速發展&#xff0c;VR虛擬現實技術已經逐漸融入我們的日常生活&#xff0c;尤其在黨建領域&#xff0c;VR數字黨建展館更是成為引領紅色教育新風尚的重要載體。今天&#xff0c;就讓我們一起探討VR數字黨建展館如何提供沉浸式體驗&#xff0c;助力黨建工作創新升級…

十年OpenCV開發以后發布的作品 - OpenCV實驗大師

OpenCV介紹 OpenCV是知名的計算機視覺框架&#xff0c;支持數十個不同的視覺處理模塊&#xff0c;提供了超過2000多個傳統算法&#xff0c;其核心功能支持圖像處理、圖像分析、特征提取、對象檢測、深度學習模型推理等。當前支持C、Python、JS、C#等多種語言SDK&#xff0c;支…

智能優化算法應用:基于袋獾算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼

智能優化算法應用&#xff1a;基于袋獾算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼 文章目錄 智能優化算法應用&#xff1a;基于袋獾算法無線傳感器網絡(WSN)覆蓋優化 - 附代碼1.無線傳感網絡節點模型2.覆蓋數學模型及分析3.袋獾算法4.實驗參數設定5.算法結果6.參考文獻7.MATLAB…

雷達點云數據.pcd格式轉.bin格式

雷達點云數據.pcd格式轉.bin格式 注意&#xff0c;方法1原則上可行&#xff0c;但是本人沒整好pypcd的環境 方法2是絕對可以的。 方法1 1 源碼如下&#xff1a; def pcb2bin1(): # save as bin formatimport os# import pypcdfrom pypcd import pypcdimport numpy as np…

python pandas dataframe常用數據處理總結

最近一直在做數據處理相關的工作&#xff0c;有幾點經常遇到的情況總結如下&#xff1a; 數據中存在為空數據如何處理 處理方式1&#xff1a;丟棄數據行 # 實現方式1 data data.dropna(subset[id]) # 若id列中某行數值為空&#xff0c;丟棄整行數據 # 實現方式2 data df[df…

Ant Design Vue 年選擇器

文章目錄 參考文檔效果展示實現過程 參考文檔 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; DatePicker 日期選擇框 大佬&#xff1a;搬磚小匠&#xff08;Ant Design vue 只選擇年&#xff09; 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案…

光標雖小,但是能讓其憑空消失的原因不少,需要仔細檢查

在Windows 10中遇到鼠標光標有問題嗎?我們已經為你提供了所需的修復程序。 光標消失的原因 光標不斷消失可能是由各種原因引起的,因此有可能找到各種各樣的解決方案。光標可能根本無法工作,或者在特定情況下可能會消失。鼠標按鈕甚至可能在光標隱藏時工作。 以下是用戶注…

如何驗證一個URL是否合法

在JavaScript中&#xff0c;可以使用正則表達式&#xff08;RegExp&#xff09;或使用內置的URL對象來校驗一個URL。下面是一些常用的方法以及對應的代碼示例&#xff1a; 使用正則表達式進行校驗&#xff1a; function validateURL(url) {const pattern /^(https?:\/\/)?…