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…

数据库系统概论复习资料

数据库系统概论考试需知 一、分值分布 1、判断题&#xff08;10分&#xff09; 1分一个 2、填空题&#xff08;20分&#xff09; 2分一个 3、选择题&#xff08;20分&#xff09; 2分一个 4、分析题&#xff08;30分&#xff09; 第一题10分&#xff0c;第二题…

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.…

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…

元宇宙vr党建云上实景展馆扩大党的影响力

随着科技的飞速发展&#xff0c;VR虚拟现实技术已经逐渐融入我们的日常生活&#xff0c;尤其在党建领域&#xff0c;VR数字党建展馆更是成为引领红色教育新风尚的重要载体。今天&#xff0c;就让我们一起探讨VR数字党建展馆如何提供沉浸式体验&#xff0c;助力党建工作创新升级…

智能优化算法应用:基于袋獾算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于袋獾算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于袋獾算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.袋獾算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

Ant Design Vue 年选择器

文章目录 参考文档效果展示实现过程 参考文档 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; DatePicker 日期选择框 大佬&#xff1a;搬砖小匠&#xff08;Ant Design vue 只选择年&#xff09; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案…

使用Caliper对Fabric地basic链码进行性能测试

如果你需要对fabric网络中地合约进行吞吐量、延迟等性能进行评估&#xff0c;可以使用Caliper来实现&#xff0c;会返回给你一份网页版的直观测试报告。下面是对test-network网络地basic链码地测试过程。 目录 1. 建立caliper-workspace文件夹2. 安装npm等3. calipe安装4. 创建…

使用TransBigData组件实现个人手机定位功能

目录 一、引言 二、技术背景 三、实现逻辑 四、代码实现 五、优化与注意事项&#xff1a; 六、总结 摘要&#xff1a;随着现代社会对定位服务的需求日益增加&#xff0c;实现个人手机定位功能成为了开发者的研究热点。本文详细阐述了如何使用Python和TransBigData组件实现…

Python 从入门到精通 学习笔记 Day03

Python 从入门到精通 第三天 今日目标 流程控制语句、退出循环、练习学习的内容 一、流程控制语句 流程控制的三种方式&#xff1a;顺序语句、双分支语句、循环语句 双分支语句 Python 的双分支语句使用if-else语句实现。 其语法结构如下: if条件:#如果条作为真&#xff…

Facebook广告报告指标CPC

在Facebook广告中&#xff0c;CPC可以作为一个关键指标来评估广告效果和投资回报。较低的CPC意味着广告主能以更低的价格获得更多的点击量&#xff0c;从而降低广告投放成本。而较高的CPC可能暗示着广告主需要更大的预算才能获得相同数量的点击。本文小编将讲讲Facebook广告报告…

k8s上安装KubeSphere

安装KubeSphere 前置环境安装nfs-server文件系统配置nfs-client配置默认存储创建了一个存储类metrics-server集群指标监控组件 安装KubeSphere执行安装查看安装进度 前置环境 下载配置我都是以CentOS 7.9 安装 k8s(详细教程)文章的服务器作为示例&#xff0c;请自行修改为自己的…

2.vue学习笔记(目录结构+模板语法+属性绑定)

1.目录结构 1.vscode ——VSCode工具的配置文件夹 2.node_modules ——Vue项目的运行依赖文件夹 3.public ——资源文件夹&#xff08;浏览器图标&#xff09; 4.src ——源码文件夹 5..gitgnore ——git忽略文件 6.index.html ——如果html文件 7.package.json —…

基于SpringBoot+Vue学生成绩管理系统前后端分离(源码+数据库)

一、项目简介 本项目是一套基于SpringBootVue学生成绩管理系统&#xff0c;主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目可以直接作为bishe使用。 项目都经过严格调试&#xff0c;确…

虚幻学习笔记10—C++函数与蓝图的通信

一、前言 除了上一章C变量与蓝图通信讲的变量能与蓝图通信外&#xff0c;还有函数和枚举也可以和蓝图通信。函数的关键字为”UFUNCTION“、枚举的关键字为”UENUM“。 二、实现 2.1、BlueprintCallable蓝图中调用 该函数时带执行的&#xff0c;带入如下。编译成功后在蓝图中输…

来自Sui的温馨建议:保护您的Web3私钥

当您安装一个钱包并创建Sui账户时&#xff0c;钱包包含一个公钥和一个私钥。保护好私钥的安全非常重要&#xff0c;从而可以保护您的Sui资产&#xff0c;包括钱包中的任何tokens。 公钥加密技术是几十年前开发的&#xff0c;是当今互联网上大多数安全交易的基础&#xff0c;包…