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.rhkb.cn/news/211051.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linix服务器添加dns解析

Linix开通互联网域名地址出现&#xff0c;如下错误&#xff1a; 需要访问的服务器上添加dns解析 vim /etc/sysconfig/network-scripts/ifcfg-ens192 添加如下配置&#xff1a; DNS1202.96.134.13 重启网卡&#xff1a; systemctl restart network 注意如果是docker服务部署…

软著项目推荐 深度学习的水果识别 opencv python

文章目录 0 前言2 开发简介3 识别原理3.1 传统图像识别原理3.2 深度学习水果识别 4 数据集5 部分关键代码5.1 处理训练集的数据结构5.2 模型网络结构5.3 训练模型 6 识别效果7 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习…

Vue实现条件渲染

&#x1f4d1;前言 本文主要是【Vue】——Vue实现条件渲染的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每日一句&am…

电商项目之Web实时消息推送(附源码)

文章目录 1 问题背景2 前言3 什么是消息推送4 短轮询5 长轮询5.1 demo代码 6 iframe流6.1 demo代码 7 SSE7.1 demo代码7.2 生产环境的应用 &#xff08;重要&#xff09; 8 MQTT 1 问题背景 扩宽自己的知识广度&#xff0c;研究一下web实时消息推送 2 前言 文章参考自Web 实时消…

数学建模-基于机器学习的家政行业整体素质提升因素分析

基于机器学习的家政行业整体素质提升因素分析 整体求解过程概述(摘要) 家政服务业即为家庭提供多种类服务的专门行业&#xff0c;在第三产业中占有重要地位。但近年来&#xff0c;由于人工智能家居产业的发展与客户对家政从业者的要求水平不断提高&#xff0c;家政行业仍面对较…

03、pytest初体验

官方实例 # content of test_sample.py def func(x):return x 1def test_ansewer():assert func(3) 5步骤解释 [100%]指的是所有测试用例的总体进度&#xff0c;完成后&#xff0c;pytest显示一个失败报告&#xff0c;因为func(3)没有返回5 注意&#xff1a;你可以使用ass…

Apache Doris 在某工商信息商业查询平台的湖仓一体建设实践

本文导读&#xff1a; 信息服务行业可以提供多样化、便捷、高效、安全的信息化服务&#xff0c;为个人及商业决策提供了重要支撑与参考。本文以某工商信息商业查询平台为例&#xff0c;介绍其从传统 Lambda 架构到基于 Doris Multi-Catalog 的湖仓一体架构演进历程。同时通过一…

c题目16:写一个递归函数,计算N阶乘

每日小语 一生中&#xff0c;最光辉的一天并非功成名就的那一天&#xff0c;而是从悲叹与绝望中产生对人生挑战与勇敢迈向意志的那一天。——福楼拜 自己思考 这个小语呢&#xff0c;我目前还达不到&#xff0c;只是顺其自然&#xff0c;很多东西做起来很有动力&#xff0c;…

OpenAI在中国,申请GPT-6、GPT-7商标

根据最新商标信息显示&#xff0c;OpenAI已经在中国提交了GPT-6和GPT-7的商标注册信息&#xff0c;分类是科学仪器和网站服务两大类。申请日期是今年的11月2日&#xff0c;目前处于审核状态。 该申请由知识产权代理公司完成&#xff0c;但申请人的地址正是OpenAI在美国公司的地…

Android Studio 模拟器设置独立窗口

目录 模拟器在窗口内部运行 设置成独立窗口 模拟器在窗口内部运行 操作起来十分不便 设置成独立窗口 Android Studio -> Preferences(Settings) -> Tools-> Emulator ->取消勾选 Launch in a tool window -> 点击右下角的 OK 按钮 -> 重启 Android Studio

二分查找边界问题——排序数组找元素第一次出现和最后一次出现

二分查找的边界逼近问题&#xff1a; 下面的代码&#xff0c;第一个函数会向左边界逼近&#xff0c;第二个函数会像右边界逼近&#xff01; 考虑left5,right6这种情况&#xff0c;如果5&#xff0c;6的值都是满足的条件的怎么办&#xff1f; 如果mid(leftright1)/2&#xff0c;…

小白备战蓝桥杯:Java常用API

目录 一、什么是API 二、API帮助文档的使用 三、String String中的成员方法都不会修改原字符串 String是啥&#xff1f; String常见构造方法 equals&#xff1a;字符串比较&#xff08;区分大小写&#xff09;​编辑 equalsIgnoreCase&#xff1a;字符串比较&#xff0…

玄子Share-CSS3 弹性布局知识手册

玄子Share-CSS3 弹性布局知识手册 Flexbox Layout&#xff08;弹性盒布局&#xff09;是一种在 CSS 中用于设计复杂布局结构的模型。它提供了更加高效、简便的方式来对容器内的子元素进行排列、对齐和分布 主轴和交叉轴 使用弹性布局&#xff0c;最重要的一个概念就是主轴与…

从零开始训练一个ChatGPT大模型(低资源,1B3)

macrogpt-prertrain 大模型全量预训练(1b3), 多卡deepspeed/单卡adafactor 源码地址&#xff1a;https://github.com/yongzhuo/MacroGPT-Pretrain.git 踩坑 1. 数据类型fp16不太行, 很容易就Nan了, 最好是fp32, tf32, 2. 单卡如果显存不够, 可以用优化器adafactor, 3. 如果…

【Go】protobuf介绍及安装

目录 一、Protobuf介绍 1.Protobuf用来做什么 2. Protobuf的序列化与反序列化 3. Protobuf的优点和缺点 4. RPC介绍 <1>文档规范 <2>消息编码 <3>传输协议 <4>传输性能 <5>传输形式 <6>浏览器的支持度 <7>消息的可读性和…

graphics.h安装后依旧报错

问题解决一&#xff1a; 我在网上找了很多&#xff0c;都说找到graphics.h这个文件&#xff0c;放到include这个目录下&#xff0c;我照做了&#xff0c;然后 当我进行编译时&#xff0c;自动跳到graphics.h这个文件并出现一堆报错 问题解决二&#xff1a; 看一下这两个文件是…

Windows11亮度调节滑块消失不见,如何解决

电脑亮度调节滑块消失&#xff0c;键盘F6&#xff0c;F7亮度调节失效&#xff0c;系统-屏幕-亮度和颜色-亮度调节消失不见 1.首先winR ,输入regedit打开注册表编辑器 2.在注册表编辑器中依次点击(红橙黄绿青蓝紫) “计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Cl…

CFS三层靶机内网渗透

CFS三层靶机内网渗透 一、靶场搭建1.基础参数信息2.靶场搭建2.1网卡配置2.2Target1配置2.2.1 网卡配置2.2.2 Target1 BT配置 2.3Target2配置2.3.1 网卡配置2.3.2 Target2 BT配置 2.4Target3配置 二、内网渗透Target11.1信息收集1.1.1IP收集1.1.2端口收集1.1.3目录收集 1.2 webs…

CentOS最小化安装后怎么转图形界面/可视化桌面?

文章目录 1、命令行和图形界面切换方式一方式二 2、最小化安装转桌面1-设置网络2-测试网络3-更新文件4-安装图形5-查看默认6-设置默认 界面效果参考视频 1、命令行和图形界面切换 如果安装的是最小化&#xff0c;那么init 5 (进入图像化桌面)命令是无效的 方式一 1.如果在命…

【计算机网络】15、NAT、NAPT 网络地址转换、打洞

文章目录 一、概念二、分类&#xff08;主要是传统 NAT&#xff09;2.1 基本 NAT2.2 NAPT 三、访问NAT下的内网设备的方式3.1 多拨3.2 端口转发、DMZ3.3 UPnP IGD、NAT-PMP3.4 服务器中转&#xff1a;frp 内网穿透3.4.1 NAT 打洞3.4.2 NAT 类型与打洞成功率3.4.2.1 完全圆锥形 …