Http请求-hutool工具类的使用

news2025/7/17 0:13:39

Http请求-hutool工具类的使用

前言

在日常java后端开发的工作中经常会遇到后端发起HTTP请求的情况,这里可以使用一个简单的工具类。

官方网址:Http请求-HttpRequest (hutool.cn)

介绍

本质上,HttpUtil中的get和post工具方法都是HttpRequest对象的封装,因此如果想更加灵活操作Http请求,可以使用HttpRequest。

Http请求-HttpRequest的使用

普通表单

我们以POST请求为例:

        //链式构建请求
        String result2 = HttpRequest.post("www.baidu.com")
                .header(Header.USER_AGENT, String.valueOf(ContentType.FORM_URLENCODED))//头信息,多个头信息多次调用此方法即可
                .form("paramMap")//表单内容
                .timeout(20000)//超时,毫秒
                .execute().body();
        Console.log(result2);

通过链式构建请求,我们可以很方便的指定Http头信息和表单信息,最后调用execute方法即可执行请求,返回HttpResponse对象。HttpResponse包含了服务器响应的一些信息,包括响应的内容和响应的头信息。通过调用body方法即可获取响应内容。

看到这里你可能就会有些疑问了,那这个==.header()==是什么呢? 里面的参数又是什么呢?该如何设置呢?别着急听我慢慢道来。

科普+学习

首先让我们到postman看看这些,下面就header的内容了,header顾名思义就是http的请求头。用于携带一些请求格式的定义信息。

在这里插入图片描述

再让我们看看==Header.USER_AGENT, String.valueOf(ContentType.FORM_URLENCODED)==都是什么吧?

Header源码:

在这里插入图片描述

ContentType源码:

在这里插入图片描述

通过hutool的源码我们可以看到,Header的本质就是一个枚举类,而我们只是拿其中已经定义好的枚举值而已,而这些枚举值就是,我们常用的一些http的请求头所需要的参数。到这里你应该也明白了,ContentType.FORM_URLENCODED就是我们所需要携带的http请求头参数的值,hutool这里也只是将它封装为一个枚举类方便调用罢了

Restful请求

String json = ...;
String result2 = HttpRequest.post(url)
    .body(json)
    .execute().body();

配置代理

如果代理无需账号密码,可以直接:

String result2 = HttpRequest.post(url)
    .setHttpProxy("127.0.0.1", 9080)
    .body(json)
    .execute().body();

如果需要自定其他类型代理或更多的项目,可以:

String result2 = HttpRequest.post(url)
    .setProxy(new Proxy(Proxy.Type.HTTP,
                new InetSocketAddress(host, port))
    .body(json)
    .execute().body();

如果遇到https代理错误Proxy returns "HTTP/1.0 407 Proxy Authentication Required",可以尝试:

System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
Authenticator.setDefault(
    new Authenticator() {
        @Override
        public PasswordAuthentication getPasswordAuthentication() {
              return new PasswordAuthentication(authUser, authPassword.toCharArray());
        }
    }
);

其它自定义项

同样,我们通过HttpRequest可以很方便的做以下操作:

  • 指定请求头
  • 自定义Cookie(cookie方法)
  • 指定是否keepAlive(keepAlive方法)
  • 指定表单内容(form方法)
  • 指定请求内容,比如rest请求指定JSON请求体(body方法)
  • 超时设置(timeout方法)
  • 指定代理(setProxy方法)
  • 指定SSL协议(setSSLProtocol)
  • 简单验证(basicAuth方法)

Http响应-HttpResponse的使用

介绍

HttpResponse是HttpRequest执行execute()方法后返回的一个对象,我们可以通过此对象获取服务端返回的:

  • Http状态码(getStatus方法)
  • 返回内容编码(contentEncoding方法)
  • 是否Gzip内容(isGzip方法)
  • 返回内容(body、bodyBytes、bodyStream方法)
  • 响应头信息(header方法)

使用

此对象的使用非常简单,最常用的便是body方法,会返回字符串Http响应内容。如果想获取byte[]则调用bodyBytes即可。

获取响应状态码

HttpResponse res = HttpRequest.post(url)..execute();
Console.log(res.getStatus());

获取响应头信息

HttpResponse res = HttpRequest.post(url)..execute();
//预定义的头信息
Console.log(res.header(Header.CONTENT_ENCODING));
//自定义头信息
Console.log(res.header("Content-Disposition"));
st(url)..execute();
//预定义的头信息
Console.log(res.header(Header.CONTENT_ENCODING));
//自定义头信息
Console.log(res.header("Content-Disposition"));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/406344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【小程序从0到1】首页布局案例的实现

欢迎来到我的博客 📔博主是一名大学在读本科生,主要学习方向是前端。 🍭目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 🛠目前正在学习的是🔥React/小程序React/小程序React/小程序&am…

let、const和var的区别(涉及块级作用域)

let 、const和var的区别 let、const、var在js中都是用于声明变量的,在没有进行ES6的学习前,我基本只会使用到var关键字进行变量的声明,但在了解了ES6之后就涉及到了块级作用域以及let,const了。 let与const let是用于替代var来…

Java实现本地缓存、分布式缓存及多级缓存

以下均为自己参考其它博主文章或自己理解整理而成,如有错误之处,欢迎在评论区批评指正! 0. 缓存简介 像MySql等传统的关系型数据库已经不能适用于所有的业务场景,比如电商系统的秒杀场景,APP首页的访问流量高峰场景&a…

火爆全网的人工智能真的有那么强嘛?

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

Element-UI中的表单验证

Element是一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。   Element为vue-cli 准备了相应的 Element 插件,开发者可以用它们快速地搭建一个基于 Element 的项目,不仅能够快速体验交互细节,还可以使用前端框架封装的代…

Spring AOP 切面增强

背景背景:我们在开发过程中,经常需要做些周边功能: 性能统计、日志、事物管理。我们需要考虑如何解耦这些周边功能开发和核心业务开发区分开达到提升代码质量目的。定义在AOP思想里面定义周边功能定义是(性能统计、日志、事务管理…

两种方案解决ERROR in Conflict: Multiple assets emit different content to the same filename index.html 的问题

Ⅰ、所遇问题简述: 1、问题描述: 在用 vue-cli 正常来创建新的基于 vue2 框架 的项目,在安装好 node-modules 之后,运行命令 ‘npm run serve’ ,报错情况如下: ERROR in Conflict: Multiple assets emit different…

用Pytorch构建第一个神经网络模型(附案例实战)

本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 目录 一、Pytorch简介 二、实验过程 2.1数据集介绍 2.2加载数据 2.3数据预处理 2.3.1特征转换 2.3.2缺失值处理 2.3.3样本不平衡处理 2.4特征工程 2.4.1划分训练集和测试集 …

Unity 插件篇 ✨ | 受击插件Feel 详细教程,开发游戏时更好的操控 游戏打击感

🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉 🎄 学习专栏推荐:Unity系统学习专栏 🌲 游戏制作专栏推荐:游戏制作 &…

同态加密详解

什么是同态加密 同态加密(Homomorphic Encryption)是指将原始数据经过同态加密后,对得到的密文进行特定的运算,然后将计算结果再进行同态解密后得到的明文等价于原始明文数据直接进行相同计算所得到的数据结果。 同态加密与一般加…

与C知道的第一次亲密接触

chatG.P.T没向大陆地区开放服务,如要注册除了要邮箱,还要一个已开放服务国家的电话号来接受验证,于是果断放弃注册。还好,CSDN官网提供过网页版的类似聊天机器人,现只在CSDN APP上才有入口。而且现在改名为“C知道”&a…

MQ-2烟雾传感器的使用

一、MQ-2烟雾传感器简介 MQ-2烟雾传感器采用在清洁空气中电导率较低的二氧化锡(SnO2),属于表面离子式N型半导体。当MQ-2烟雾传感器在200到300摄氏度环境时,二氧化锡吸附空气中的氧,形成氧的负离子吸附,使半导体中的电子密度减少&a…

学习操作系统的必备教科书《操作系统:原理与实现》| 文末赠书4本

使用了6年的实时操作系统,是时候梳理一下它的知识点了 摘要: 本文简单介绍了博主学习操作系统的心路历程,同时还给大家总结了一下当下流行的几种实时操作系统,以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 文章目录…

技术瓶颈?如何解决MongoDB超大块数据问题?

目录一、MongoDB服务器管理1、添加服务器2、修改分片中的服务器3、删除分片二、均衡器三、修改块的大小四、超大块1、分发超大块2、分发超大块步骤:3、避免出现超大块4、输出内容详解:五、系统分析器六、一些常见的辅助命令大家好,我是哪吒&a…

阿里巴巴高并发架构,到底如何对抗双十一亿级并发流量

前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务…

【Linux】网络编程套接字(中)

🎇Linux: 博客主页:一起去看日落吗分享博主的在Linux中学习到的知识和遇到的问题博主的能力有限,出现错误希望大家不吝赐教分享给大家一句我很喜欢的话: 看似不起波澜的日复一日,一定会在某一天让你看见坚持…

【Linux】第一座高山——进程地址空间

大家好我是沐曦希💕 文章目录一、什么是进程地址空间二、进程地址空间的管理1.区域划分和调整三、为什么存在进程地址空间四、写在最后一、什么是进程地址空间 我们在学习C/C的动态内存空间,习惯把地址空间划分为几个区域: 但是这并不是真的的地址空间…

2023年网络安全趋势

数据安全越来越重要。 我国《数据安全法》提出“建立健全数据安全治理体系”,各地区部门均在探索和简历数据分类分级、重要数据识别与重点保护制度。 数据安全治理不仅是一系列技术应用或产品,更是包括组织构建、规范制定、技术支撑等要素共同完成数据…

node - 下载安装指定版本

文章目录前言一、什么是Node?二、安装1.打开 Node官网2.点击DOWNLOADS3.点击 All download options4.修改地址栏中对应的版本号修改版本号后选择需要的文件下载即可 ![在这里插入图片描述](https://img-blog.csdnimg.cn/049c33e7ebad4114937f23447c5d8c71.png)前言 node 下载…

python实现——处理Excel表格(超详细)

目录xls和xlsx基本操作1:用openpyxl模块打开Excel文档,查看所有sheet表2.1:通过sheet名称获取表格2.2:获取活动表3.1:获取表格的尺寸4.1:获取单元格中的数据4.2:获取单元格的行、列、坐标5&…