Hutool工具包:http客户端工具(使用教程)

目录

一、Hutool介绍

二、笔者的话

三、引入依赖

四、大致步骤

五、GET请求

5.1 代码

5.2 结果展示

六、POST请求

6.1 代码一(Form Data类型参数)

6.2 结果展示

6.3 代码二(Form Data类型参数 - 含上传文件)

6.4 结果展示

6.5 代码三 (Request Payload,即JSON格式的参数)

6.6 结果展示

七、处理响应主体(JSON工具的使用)


一、Hutool介绍

以下来自官网🚚🚚🚚:Hutool参考文档

Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;

Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。

Hutool名称的由来

Hutool = Hu + tool,是原公司项目底层代码剥离后的开源库,“Hu”是公司名称的表示,tool表示工具。Hutool谐音“糊涂”,一方面简洁易懂,一方面寓意“难得糊涂”。

二、笔者的话

如何使用其实官网文档已经很详细了,我为什么要单独写一篇教程,主要目的是方便个人巩固熟练,如果也能帮助到你,那是我的荣幸!❤️💛💙💚💜🤎

三、引入依赖

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>4.5.1</version>
</dependency>

四、大致步骤

  1. 构建一个http请求 - 请求的哪个地址
  2. 设置请求方式、请求头、请求参数等信息
  3. 执行请求,返回一个http响应类
  4. 然后通过这个相应类可以获取响应的主体、cookie、是否请求成功等信息
  5. 要获取具体某些信息,主要就是在主体上进行操作了

五、GET请求

5.1 代码

    @GetMapping("test")public Result<String> test(String username,String password){return Result.success(username + "    " + password);}
public static void main(String[] args){// 1. 创建HttpRequest对象 - 指定好 url 地址HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/test/test");// 2. 设置请求方式,默认是GET请求httpRequest.setMethod(Method.GET);// 3. 设置请求参数   可通过 form表单方法 设置//    form方法有很多重载方法,可以一个一个参数设置,也可以将参数封装进一个map集合然后一块儿传Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("username","牛飞");httpRequest.form(paramsMap);httpRequest.form("password", "123456");httpRequest.form("username","阿祖");// 4. 设置请求头//    请求头同样可以逐一设置,也可以封装到map中再统一设置//    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明httpRequest.header("x-c-authorization","yourToken");// 5. 执行请求,得到http响应类HttpResponse execute = httpRequest.execute();// 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内System.out.println(ok);List<HttpCookie> cookies = execute.getCookies();// 获取所有cookiecookies.forEach(System.out::println); // 如果为空不会遍历的String body = execute.body();   // 获取响应主体System.out.println(body);}

5.2 结果展示

六、POST请求

6.1 代码一(Form Data类型参数)

    @LogAnnotation(module = "宠物分类",operation = "根据条件查询指定宠物分类信息")@ApiOperation("根据条件查询指定宠物分类信息")@PostMapping("/findPetCategoryListQuery")public Result<List<PetCategoryVo>> findPetCategoryListQuery(@RequestParam("parentId") int parentId ,@RequestParam("hotFlag") int hotFlag ){List<PetCategoryVo> list = petCategoryService.findPetCategoryListQuery(parentId,hotFlag);return Result.success(list);}
public static void main(String[] args) {// 1. 创建HttpRequest对象 - 指定好 url 地址HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/pethome/pet-category/findPetCategoryListQuery");// 2. 设置请求方式,默认是GET请求httpRequest.setMethod(Method.POST);// 3. 设置请求参数   可通过 form表单方法 设置//    form方法有很多重载方法,可以一个一个参数设置,也可以将参数封装进一个map集合然后一块儿传Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("parentId","1");paramsMap.put("hotFlag","1");httpRequest.form(paramsMap);// 4. 设置请求头//    请求头同样可以逐一设置,也可以封装到map中再统一设置//    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明httpRequest.header("x-c-authorization","yourToken");// 5. 执行请求,得到http响应类HttpResponse execute = httpRequest.execute();// 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内System.out.println(ok);List<HttpCookie> cookies = execute.getCookies();// 获取所有cookiecookies.forEach(System.out::println); // 如果为空不会遍历的String body = execute.body();   // 获取响应主体System.out.println(body);}

6.2 结果展示

true
{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}

6.3 代码二(Form Data类型参数 - 含上传文件)

    @ApiOperation("测试上传文件")@PostMapping("uploadTest")public Result<String> uploadTest(@RequestParam("image")MultipartFile file){// 获取原始文件名称:如 aa.pngString originalFilename = file.getOriginalFilename();// 修改成唯一的名称originalFilename = UUID.randomUUID().toString().substring(0,8) + "." + originalFilename;// 上传boolean uploadFlag = qiniuUtils.upload(file, originalFilename);if (uploadFlag){return Result.success(qiniuUtils.url + originalFilename);}else {return Result.fail();}}
public static void main(String[] args) {// 1. 创建HttpRequest对象 - 指定好 url 地址HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/test/uploadTest");// 2. 设置请求方式,默认是GET请求httpRequest.setMethod(Method.POST);// 3. 设置请求参数 可通过 form表单方法 设置   可以是文件类型//    form方法有很多重载方法,可以一个一个参数设置,也可以将参数封装进一个map集合然后一块儿File file = new File("C:\\Users\\hssym\\Downloads\\UBQ.png");httpRequest.form("image",file);// 4. 设置请求头//    请求头同样可以逐一设置,也可以封装到map中再统一设置//    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明httpRequest.header("x-c-authorization","yourToken");// 5. 执行请求,得到http响应类HttpResponse execute = httpRequest.execute();// 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内System.out.println(ok);List<HttpCookie> cookies = execute.getCookies();// 获取所有cookiecookies.forEach(System.out::println); // 如果为空不会遍历的String body = execute.body();   // 获取响应主体System.out.println(body);}

6.4 结果展示

6.5 代码三 (Request Payload,即JSON格式的参数)

和代码一、代码二不同的是,这次我们前后端约定通过json的格式传递参数。

此时不能再用form方法设置参数了,需要改用它提供的body方法。

    @LogAnnotation(module = "宠物分类",operation = "根据条件查询指定宠物分类信息")@ApiOperation("根据条件查询指定宠物分类信息")@PostMapping("/findPetCategoryListQuery")public Result<List<PetCategoryVo>> findPetCategoryListQuery(@RequestBody QueryPetCategoryForm form){List<PetCategoryVo> list = petCategoryService.findPetCategoryListQuery(form);return Result.success(list);}
public static void main(String[] args) {// 1. 创建HttpRequest对象 - 指定好 url 地址HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/pethome/pet-category/findPetCategoryListQuery");// 2. 设置请求方式,默认是GET请求httpRequest.setMethod(Method.POST);// 3. 设置请求参数   前后端约定通过json格式传递参数,此时就不能用form方法了,改用它提供的body方法Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("parentId","1");paramsMap.put("hotFlag","1");String paramsJson = JSON.toJSONString(paramsMap);httpRequest.body(paramsJson);// 需要转成json字符串// 4. 设置请求头//    请求头同样可以逐一设置,也可以封装到map中再统一设置//    设置的请求头是否可以覆盖等信息具体请看源码关于重载方法的说明httpRequest.header("x-c-authorization","yourToken");// 5. 执行请求,得到http响应类HttpResponse execute = httpRequest.execute();// 6. 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息boolean ok = execute.isOk(); // 是否请求成功 判断依据为:状态码范围在200~299内System.out.println(ok);List<HttpCookie> cookies = execute.getCookies();// 获取所有cookiecookies.forEach(System.out::println); // 如果为空不会遍历的String body = execute.body();   // 获取响应主体System.out.println(body);}

6.6 结果展示

true
{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}

ok,以上不管哪种请求,基本的方法是不变的,触类旁通。

七、处理响应主体(JSON工具的使用)

我们以post请求的代码三为例,它得到的响应主体结构如下:

{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}

有了它,我们就能获取有关的数据了。这主要就是JSON工具的使用了。

我习惯上用fastjson,下述案例就以fastjson工具进行处理:

现在,我们希望获取到所有的分类名称

    public static void main(String[] args) {HttpRequest httpRequest = new HttpRequest("http://10.77.78.73:8000/pethome/pet-category/findPetCategoryListQuery");httpRequest.setMethod(Method.POST);Map<String, Object> paramsMap = new HashMap<>();paramsMap.put("parentId","1");paramsMap.put("hotFlag","1");String paramsJson = JSON.toJSONString(paramsMap);httpRequest.body(paramsJson);// 需要转成json字符串httpRequest.header("x-c-authorization","yourToken");HttpResponse execute = httpRequest.execute();// 解析这个http响应类,可以获取到响应主体、cookie、是否请求成功等信息if (execute.isOk()){String body = execute.body();   // 获取响应主体System.out.println(body);JSONObject bodyJsonObject = JSON.parseObject(body);// 将获取的响应主体解析成json对象JSONArray dataJsonArray = bodyJsonObject.getJSONArray("data"); // 从json对象中获取指定属性的值,并将其转换成json数组(前提是该属性的值是数组结构)if (dataJsonArray != null){for (int i = 0; i < dataJsonArray.size(); i++) {JSONObject dataItemJsonObject = dataJsonArray.getJSONObject(i); // 从json数组中获取json对象String categoryName = dataItemJsonObject.getString("categoryName"); // 从json对象中获取指定属性的值System.out.println(categoryName);}}}}
{"code":1,"msg":"请求成功","data":[{"id":4,"parentId":1,"categoryName":"美国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/61449428.a76e175.jpg","createTime":"2023-08-13 16:59:11","updateTime":"2023-08-13 23:30:50","deleteFlag":0,"children":null},{"id":5,"parentId":1,"categoryName":"俄罗斯蓝猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:45","updateTime":"2023-08-13 17:04:38","deleteFlag":0,"children":null},{"id":6,"parentId":1,"categoryName":"布偶猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 16:59:56","updateTime":"2023-08-13 17:04:39","deleteFlag":0,"children":null},{"id":7,"parentId":1,"categoryName":"英国短尾猫","level":2,"hotFlag":1,"img":"http://rzc4iq21h.hb-bkt.clouddn.com/e919d872.xhscdn.jpg","createTime":"2023-08-13 17:00:31","updateTime":"2023-08-13 23:35:32","deleteFlag":0,"children":null},{"id":8,"parentId":1,"categoryName":"波斯猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:37","updateTime":"2023-08-13 17:04:42","deleteFlag":0,"children":null},{"id":9,"parentId":1,"categoryName":"苏格兰折耳猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:00:50","updateTime":"2023-08-13 17:04:43","deleteFlag":0,"children":null},{"id":10,"parentId":1,"categoryName":"暹罗猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:15","updateTime":"2023-08-13 17:04:46","deleteFlag":0,"children":null},{"id":11,"parentId":1,"categoryName":"咖啡猫","level":2,"hotFlag":1,"img":null,"createTime":"2023-08-13 17:01:38","updateTime":"2023-08-13 17:05:17","deleteFlag":0,"children":null}]}
美国短尾猫
俄罗斯蓝猫
布偶猫
英国短尾猫
波斯猫
苏格兰折耳猫
暹罗猫
咖啡猫

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

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

相关文章

开发高性能知识付费平台:关键技术策略

引言 在构建知识付费平台时&#xff0c;高性能是确保用户满意度和平台成功的关键因素之一。本文将探讨一些关键的技术策略&#xff0c;帮助开发者打造高性能的知识付费平台。 1. 前端性能优化 使用CDN加速资源加载 使用内容分发网络&#xff08;CDN&#xff09;来托管和加…

JavaWeb后端开发 JWT令牌解析 登录校验 通用模板/SpringBoot整合

目录 实现思路 会话跟踪的三个方案--引出Jwt令牌技术 1.访问cookie的值,在同一会话的不同请求之间共享数据 2.session 3.现代普遍采用的令牌技术--JWT令牌 JWT令牌技术 ​第一步--生成令牌 1.引入依赖 2.生成令牌 第二步--校验令牌 第三步--登录下发令牌 需要解决的…

黑马JVM总结(二十三)

&#xff08;1&#xff09;字节码指令-init 方法体内有一些字节&#xff0c;对应着将来要由java虚拟机执行方法内的代码&#xff0c;构造方法里5个字节代码&#xff0c;main方法里有9个字节的代码 java虚拟机呢内部有一个解释器&#xff0c;这个解释器呢可以识别平台无关的字…

四种自动化测试模型实例及优缺点

【软件测试面试突击班】如何逼自己一周刷完软件测试八股文教程&#xff0c;刷完面试就稳了&#xff0c;你也可以当高薪软件测试工程师&#xff08;自动化测试&#xff09; 一&#xff0c;线性测试 1.概念&#xff1a; 通过录制或编写对应应用程序的操作步骤产生的线性脚本。单…

分工是财富的秘密

友情提示&#xff1a;这是一篇干货&#xff0c;需要深度阅读 前几天&#xff0c;我看到一个做自媒体的大 V 说了这么一个观点&#xff1a;分工是财富的秘密。 然后&#xff0c;我根据这句话&#xff0c;自己做了点引申。 分工是财富的秘密。分工越细&#xff0c;赚钱机会越多&a…

OpenGL之坐标系统

将坐标变换为标准化设备坐标&#xff0c;接着再转化为屏幕坐标的过程通常是分步进行的&#xff0c;也就是类似于流水线那样子。在流水线中&#xff0c;物体的顶点在最终转化为屏幕坐标之前还会被变换到多个坐标系统(Coordinate System)。将物体的坐标变换到几个过渡坐标系(Inte…

从Python代码到诗

&#x1f433;序言 在Python社区&#xff0c;没有强制的编码标准&#xff0c;这虽然赋予了开发者更多的自由&#xff0c;但也导致代码风格不一致性。使得部分代码变得晦涩难懂&#xff0c;本文将探讨一系列的开发技巧和最佳实践&#xff0c;开发出优雅的Python脚本。 1、参数接…

ElasticSearch(三)

1.数据聚合 聚合&#xff08;aggregations&#xff09;可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f; 这些手机的平均价格、最高价格、最低价格&#xff1f; 这些手机每月的销售情况如何&#xff1f; 实现这些…

laravel框架 - 消息队列如何使用

业务场景&#xff1a;项目里边有很多视频资源需要上传到抖音资源库&#xff0c;通过队列一条一条上传。 参考实例&#xff1a;发送邮件&#xff0c;仅供参考 (1)创建任务【生成任务类】 在你的应用程序中&#xff0c;队列的任务类都默认放在 app/Jobs 目录下。如果这个目录不存…

解决ubuntu系统python2.7安装uwsgi报错

背景 因为项目老旧&#xff0c;仍需使用python2.7&#xff0c;仍需要使用pip2 安装依赖。在安装uwsgi的时候&#xff0c;报错。 错误一 Building wheel for uwsgi (setup.py) ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python2 -u -…

vulhub打靶第三周

第三周 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/chronos-1,735/ 环境折磨导致做晚了&#xff0c;再加上期末的考试多耽搁下来了&#xff0c;然后就是辗转反侧打比赛&#xff0c;拖了这么久&#xff0c;时隔三个月重新开打 因为陆陆续续打了两次&#xff0c;所…

[winerror 5] 拒绝访问。: ‘..\\data‘解决方案

使用Jupyter Notebook学习深度学习时出现错误如下&#xff1a;[winerror 5] 拒绝访问。: ‘…\data’ 解决方法&#xff1a; 打开anaconda3找到对应环境的python.exe 点开属性&#xff0c;点安全&#xff0c;选择如下&#xff1a; 点编辑&#xff0c;选择User&#xff0c;勾…

9、DVWA——XSS(Stored)

文章目录 一、存储型XSS概述二、low2.1 源码分析2.2 通关分析 三、medium3.1 源码分析3.2 通关思路 四、high4.1 源码分析4.2 通关思路 一、存储型XSS概述 XSS&#xff0c;全称Cross Site Scripting&#xff0c;即跨站脚本攻击&#xff0c;某种意义上也是一种注入攻击&#xff…

李航老师《统计学习方法》第1章阅读笔记

1.1 统计学习 统计学习的特点 统计学习&#xff1a;计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析 现在人们提及机器学习时&#xff0c;往往指统计机器学习&#xff0c;所以可以认为本书介绍的是机器学习方法 统计学习的对象 统计学习研究的对象是数据(data)…

《Web安全基础》09. WAF 绕过

web 1&#xff1a;基本概念1.1&#xff1a;DoS & DDos1.2&#xff1a;CC 攻击1.3&#xff1a;扫描绕过方式 2&#xff1a;WAF 绕过2.1&#xff1a;信息收集阶段2.2&#xff1a;漏洞发现阶段2.3&#xff1a;权限控制阶段2.3.1&#xff1a;密码混淆2.3.2&#xff1a;变量覆盖…

解决方案:TSINGSEE青犀+智能分析网关助力智慧仓储智能化监管

为全面保障物流仓储的安全性与完整性&#xff0c;解决仓库管理难题&#xff0c;优化物流仓储方式&#xff0c;提升仓储效率&#xff0c;降低人工成本&#xff0c;旭帆科技推出智慧仓储AI视频智能分析方案&#xff0c;利用物联网、大数据、云计算等技术&#xff0c;对仓储管理进…

IDEA2023新UI回退老UI

idea2023年发布了新UI&#xff0c;如下所示 但是用起来真心不好用&#xff0c;各种位置也是错乱&#xff0c;用下面方法可以回退老UI

【轨道机器人】成功驱动伺服电机(学生电源、DCH调试软件、DH系列伺服驱动器)

1、硬件平台 工控机 学生电源 DH系列伺服驱动器 电机 调试平台&#xff1a;DCH 2、如何利用dch驱动电机 点击可驱动电机 下面的步骤是比较关键的几步&#xff1a; 3、遇到的问题 不能成功驱动电机&#xff0c;还和厂家那边打电话&#xff0c;询问 发现是这…

JavaScript简介引入方式(JavaScript基础语法、JavaScript对象、BOM、DOM、事件监听)

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JavaScript简介&引入方式 简介&#xf…

智能生活从这里开始:数字孪生驱动的社区

数字孪生技术&#xff0c;这个近年来备受瞩目的名词&#xff0c;正迅速渗透到社区发展领域&#xff0c;改变着我们居住的方式、管理的方式以及与周围环境互动的方式。它不仅仅是一种概念&#xff0c;更是一种变革&#xff0c;下面我们将探讨数字孪生技术如何推动社区智能化发展…