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.mzph.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?:\/\/)?…