当前位置: 首页 > news >正文

Spring Boot 3.4新特性:RestClient和RestTemplate的重大更新详解

本文将深入探讨Spring Boot 3.4版本中关于RestClient和RestTemplate的重要更新。。

1. 背景介绍

在Spring生态系统中,HTTP客户端一直是一个重要的组件。从最早的RestTemplate,到WebClient,再到现在的RestClient,每一次演进都带来了更好的开发体验。Spring Boot 3.4版本在HTTP客户端支持方面带来了重大更新,这些更新不仅提供了更多的选择,还大大简化了配置过程。

2. HTTP客户端架构的演进

2.1 历史回顾

  1. RestTemplate时代(Spring 3.0+)

    • 同步阻塞式API
    • 基于传统的Java模式
    • 配置相对复杂
  2. WebClient时代(Spring 5.0+)

    • 响应式非阻塞API
    • 支持响应式编程
    • 需要引入额外的响应式依赖
  3. RestClient时代(Spring 6.1+)

    • 现代化同步API
    • 流畅的链式调用
    • 更简单的配置方式

2.2 Spring Boot 3.4的重大变化

在Spring Boot 3.4中,新增了对使用Reactor Netty的HttpClient和JDK HttpClient的自动配置支持。现在支持的客户端按优先顺序排列如下:

  1. Apache HTTP Components

    • 实现类:HttpComponentsClientHttpRequestFactory
    • 特点:功能最完整,支持高级特性
    • 适用场景:企业级应用,需要高度定制化
  2. Jetty Client

    • 实现类:JettyClientHttpRequestFactory
    • 特点:轻量级,性能优秀
    • 适用场景:中小型应用,追求性能
  3. Reactor Netty HttpClient

    • 实现类:ReactorClientHttpRequestFactory
    • 特点:支持响应式编程,异步处理能力强
    • 适用场景:需要处理大量并发请求
  4. JDK HttpClient

    • 实现类:JdkClientHttpRequestFactory
    • 特点:JDK原生支持,无需额外依赖
    • 适用场景:简单应用,追求轻量级
  5. Simple JDK HttpURLConnection

    • 实现类:SimpleClientHttpRequestFactory
    • 特点:最基础的实现,功能有限
    • 适用场景:简单测试,原型开发

3. 配置体系详解

3.1 基础配置

3.1.1 客户端选择配置
# 选择HTTP客户端实现
spring.http.client.factory=reactor# 可选值说明:
# http-components:使用Apache HTTP Components
# jetty:使用Jetty Client
# reactor:使用Reactor Netty
# jdk:使用JDK HttpClient
# simple:使用简单的HttpURLConnection
3.1.2 重定向处理配置
# 重定向策略配置
spring.http.client.redirects=dont-follow# 其他相关配置
spring.http.client.max-redirects=5  # 最大重定向次数
spring.http.client.connect-timeout=5000  # 连接超时(毫秒)
spring.http.client.read-timeout=15000  # 读取超时(毫秒)

3.2 高级配置

3.2.1 SSL/TLS配置
# SSL配置
spring.http.client.ssl.enabled=true
spring.http.client.ssl.key-store=classpath:keystore.jks
spring.http.client.ssl.key-store-password=secret
spring.http.client.ssl.trust-store=classpath:truststore.jks
spring.http.client.ssl.trust-store-password=secret
3.2.2 连接池配置
# 连接池配置
spring.http.client.pool.max-connections=100
spring.http.client.pool.max-idle-time=30s
spring.http.client.pool.validation-interval=30s

4. RestClient基础特性

4.1 核心优势

  1. 现代化API设计

    • 流畅的链式调用
    • 直观的方法命名
    • 更好的类型推断
  2. 增强的类型安全

    • 改进的泛型支持
    • 编译时类型检查
    • 更清晰的错误提示
  3. 简化的错误处理

    • 统一的异常层次
    • 详细的错误信息
    • 可定制的错误处理器

4.2 基础用法示例

4.2.1 GET请求示例
// 基本GET请求
RestClient restClient = RestClient.create();// 简单查询
Person person = restClient.get().uri("https://api.example.com/persons/{id}", 42).retrieve().body(Person.class);// 带查询参数
List<Person> persons = restClient.get().uri("https://api.example.com/persons").header("Accept", "application/json").header("API-Key", "your-api-key").retrieve().body(new ParameterizedTypeReference<List<Person>>() {});
4.2.2 POST请求示例
// 基本POST请求
Person newPerson = new Person("John Doe", 30);
Person created = restClient.post().uri("https://api.example.com/persons").contentType(MediaType.APPLICATION_JSON).body(newPerson).retrieve().body(Person.class);// 带表单数据的POST请求
String response = restClient.post().uri("https://api.example.com/submit").contentType(MediaType.APPLICATION_FORM_URLENCODED).body("name=John&age=30").retrieve().body(String.class);

5. RestTemplate更新要点

虽然Spring官方推荐在新项目中使用RestClient,但RestTemplate在Spring Boot 3.4中也得到了重要更新:

5.1 自动配置增强

@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.setConnectTimeout(Duration.ofSeconds(5)).setReadTimeout(Duration.ofSeconds(15)).requestFactory(() -> new HttpComponentsClientHttpRequestFactory()).errorHandler(new DefaultResponseErrorHandler()).build();}
}

5.2 新增功能

  1. 改进的SSL/TLS支持

    • 更简单的证书配置
    • 更好的安全性控制
    • 灵活的信任策略
  2. 增强的错误处理

    • 更详细的错误信息
    • 可定制的错误处理策略
    • 统一的异常处理机制
  3. 更好的性能优化

    • 改进的连接池管理
    • 更智能的资源释放
    • 优化的请求处理流程

5. RestClient高级特性

在实际的企业级应用中,我们常常需要对HTTP客户端进行更复杂的定制和扩展。Spring Boot 3.4提供了一系列强大的高级特性,让开发者能够更好地控制和优化HTTP客户端的行为。

5.1 请求/响应拦截器

拦截器模式是一种强大的横切关注点实现方式,它允许我们在不修改原有代码的情况下,统一处理请求和响应。在实际应用中,拦截器常用于:

  • 添加统一的请求头(如认证信息)
  • 请求和响应日志记录
  • 性能监控
  • 统一的错误处理
  • 请求/响应数据转换

以下是一个完整的拦截器配置示例:

@Configuration
public class RestClientConfig {@Beanpublic RestClient restClient(RestClientBuilder builder) {return builder.requestInterceptor((request, body, execution) -> {// 添加通用请求头request.getHeaders().add("X-Trace-Id", UUID.randomUUID().toString());// 记录请求日志log.info("Making request to: {}", request.getURI());return execution.execute(request, body);}).responseInterceptor((request, response) -> {// 记录响应日志log.info("Received response with status: {}", response.getStatusCode());return response;}).build();}
}

5.2 高级错误处理

在分布式系统中,错误处理是一个关键的考虑点。良好的错误处理机制应该能够:

  • 区分不同类型的错误(网络错误、业务错误等)
  • 提供有意义的错误信息
  • 支持优雅的降级策略
  • 便于问题诊断和修复

下面是一个自定义错误处理器的实现:

@Component
public class CustomErrorHandler implements ResponseErrorHandler {@Overridepublic boolean hasError(ClientHttpResponse response) throws IOException {return response.getStatusCode().isError();}@Overridepublic void handleError(ClientHttpResponse response) throws IOException {if (response.getStatusCode().is4xxClientError()) {// 处理客户端错误(如参数错误、认证失败等)throw new CustomClientException("Client error: " + response.getStatusCode());} else if (response.getStatusCode().is5xxServerError()) {// 处理服务器错误(如内部错误、服务不可用等)throw new CustomServerException("Server error: " + response.getStatusCode());}}
}

5.3 请求重试机制

在不稳定的网络环境下,请求重试是提高系统可靠性的重要手段。Spring Boot 3.4提供了灵活的重试配置选项:

  • 可配置最大重试次数
  • 支持退避策略(指数退避、固定间隔等)
  • 可选择性重试特定类型的异常
  • 支持自定义重试判断逻辑
@Configuration
public class RetryConfig {@Beanpublic RestClient retryableRestClient(RestClientBuilder builder) {return builder.requestInterceptor(new RetryInterceptor(RetryPolicy.builder().maxAttempts(3)          // 最多重试3次.backoff(Duration.ofSeconds(1))  // 重试间隔1秒.retryOn(IOException.class)      // 网络IO异常时重试.build())).build();}
}

6. 性能优化最佳实践

性能优化是企业级应用的永恒主题。在HTTP客户端的性能优化中,主要关注以下几个方面:

6.1 连接池优化

连接池是提升HTTP客户端性能的关键。合理的连接池配置可以:

  • 减少连接建立的开销
  • 提高并发处理能力
  • 避免资源耗尽
  • 优化响应时间

以下是一个优化的连接池配置示例:

@Configuration
public class HttpClientConfig {@Beanpublic RestClient pooledRestClient() {HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();// 根据实际负载调整这些参数cm.setMaxTotal(100);           // 整个连接池的最大连接数cm.setDefaultMaxPerRoute(20);  // 每个路由的最大连接数HttpClient httpClient = HttpClients.custom().setConnectionManager(cm).setKeepAliveStrategy((response, context) -> 30 * 1000)  // 连接保持30秒.build();factory.setHttpClient(httpClient);return RestClient.builder().requestFactory(() -> factory).build();}
}

6.2 超时策略

合理的超时配置是系统稳定性的保障。需要考虑:

  • 连接超时:建立连接的最大等待时间
  • 请求超时:等待服务器响应的最大时间
  • 读取超时:读取响应数据的最大时间
@Configuration
public class TimeoutConfig {@Beanpublic RestClient timeoutConfiguredRestClient() {return RestClient.builder().requestFactory(() -> {HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();// 根据实际场景调整这些超时值factory.setConnectTimeout(5000);    // 连接超时5秒factory.setConnectionRequestTimeout(5000);  // 请求超时5秒factory.setReadTimeout(15000);      // 读取超时15秒return factory;}).build();}
}

参考资料

  • Spring Boot 3.4 Release Notes
  • Spring Boot REST Client Documentation
  • Spring Framework Documentation

相关文章:

Spring Boot 3.4新特性:RestClient和RestTemplate的重大更新详解

本文将深入探讨Spring Boot 3.4版本中关于RestClient和RestTemplate的重要更新。。 1. 背景介绍 在Spring生态系统中&#xff0c;HTTP客户端一直是一个重要的组件。从最早的RestTemplate&#xff0c;到WebClient&#xff0c;再到现在的RestClient&#xff0c;每一次演进都带来…...

ANSYS EMC Plus:谐振腔中的天线

概述 本博客说明了如何使用 EMA3D 和 MHARNESS 模拟工具来模拟腔内天线产生的电场。下面简要概述了完成模拟所需的步骤&#xff0c;视频链接中提供了完整的演示。 步骤1&#xff1a;定义模拟域 准备模拟的第一步是定义模拟域。该域应包含所有需要分析的几何图形。在此演示中…...

lv_ffmpeg学习及播放rtsp

lvgl8.3有ffmpeg支持 FFmpeg support typedef struct {lv_img_t img;lv_timer_t * timer;lv_img_dsc_t imgdsc;bool auto_restart;struct ffmpeg_context_s * ffmpeg_ctx; } lv_ffmpeg_player_t;typedef enum {LV_FFMPEG_PLAYER_CMD_START,LV_FFMPEG_PLAYER_CMD_STOP,LV_FFMP…...

Java前端基础—HTML

Java前端基础—HTML 目录 Java前端基础—HTML1.简介2.基础语法2.1HTML页面固定结构2.2标题标签2.3段落标签2.4换行标签2.5水平线标签2.6文本标签2.7图片标签2.8音频标签2.9视频标签2.10链接标签2.11列表标签2.12表格标签2.13表单标签2.14语义标签 1.简介 1.网页组成&#xff1…...

salesforce 控制 Experience Cloud 站点用户可以看到哪些用户

在 Salesforce 的 Experience Cloud 中&#xff0c;您可以通过多种方式控制站点用户&#xff08;如社区用户&#xff09;之间的可见性。这包括用户之间的信息可见性以及他们可以访问的其他用户数据。以下是几种方法和设置&#xff0c;用于实现对 Experience Cloud 站点用户可见…...

C语言实现尼科彻斯定理

1.题目&#xff1a; 2.分析 【1】怎么输出连续奇数&#xff1a;下面是输出m个连续奇数的代码 #include<stdio.h>int main(){int m,x;scanf("%d",&m);for(int i0;i<m:i){printf("%d",x);xx2;}return 0; } 【2】啥叫尼科彻斯定理&#xff1f;…...

【Ubuntu添加右键wine运行exe程序文件】

【前提】你在Ubuntu中安装了wine 【效果展示】右键在打开方式中显示用wine运行 以bilibli安装包为例&#xff0c;在B站安装包右键选择打开方式 省去了在终端中输入wine命令 【步骤】如何添加右键wine运行exe程序文件 新建一个文本文档 其中填入以下内容 [Desktop Entry]…...

7. Linux网络服务配置全面指南

本章目录&#xff1a; 引言7. 网络服务配置7.1 DNS服务器配置安装BIND配置区域文件创建区域文件测试与重启DNS服务示例图&#xff1a;DNS解析流程 7.2 Web服务器部署&#xff08;Apache/Nginx&#xff09;Apache与Nginx的选择安装Apache示例&#xff1a;部署静态网站安装Nginx配…...

深入探讨 Nginx 性能优化:从基础到高级的最佳实践

目录 引言Nginx 性能优化的意义Nginx 性能优化的主要方向系统层面的优化 4.1 优化操作系统的文件描述符4.2 调整 TCP 参数4.3 使用高效的磁盘 I/O 调度器 Nginx 配置优化 5.1 优化 worker 进程和连接数5.2 使用异步和非阻塞 I/O 模式5.3 配置 Gzip 压缩5.4 开启缓存和缓存控制…...

纯 HTML+CSS+JS 实现一个炫酷的圣诞树动画特效

纯 HTMLCSSJS 实现一个炫酷的圣诞树动画特效 前言 圣诞节快到了&#xff0c;今天给大家带来一个简单但是效果不错的圣诞树动画特效。这个特效完全使用原生 HTML、CSS 和 JavaScript 实现&#xff0c;包含闪烁的星星、随机彩灯等元素&#xff0c;非常适合节日气氛&#xff01;…...

Python使用requests_html库爬取掌阅书籍(附完整源码及使用说明)

教程概述 本教程先是幽络源初步教学分析掌阅书籍的网络结构&#xff0c;最后提供完整的爬取源码与使用说明&#xff0c;并展示结果&#xff0c;切记勿将本教程内容肆意非法使用。 原文链接&#xff1a;Python使用requests_html库爬取掌阅书籍&#xff08;附完整源码及使用说明…...

Linux网络——UDP的运用

Linux网络——UDP的运用 文章目录 Linux网络——UDP的运用一、引入二、服务端实现2.1 创建socket套接字2.2 指定网络接口并bind2.3 接收数据并处理2.4 整体代码2.5 IP的绑定的细节 三、用户端实现3.1 创建套接字3.2 指定网络接口3.3 发生数据并接收3.4 绑定问题 四、代码五、UD…...

axios

文章目录 [TOC](文章目录) 一、axios的基本使用axios请求1、引用axios,并发送请求axios发送请求的简化写法2、接受响应数据&#xff0c;并对响应的数据进行处理 三、axios拦截器&#xff08;instance&#xff09;1、请求拦截2、响应拦截 axios拦截器、vue中的路由守卫、servlet…...

MacOS下TestHubo安装配置指南

TestHubo是一款开源免费的测试管理工具&#xff0c; 下面介绍MacOS私有部署的安装与配置。TestHubo 私有部署版本更适合有严格数据安全要求的企业&#xff0c;支持在本地或专属服务器上运行&#xff0c;以实现对数据和系统的完全控制。 1、Mac 服务端安装 Mac安装包下载地址&a…...

vue2/3,Spring Boot以及生产环境跨域解决方案

vue2和vue3跨域解决方案 Vue 2 (基于 Webpack) 的跨域解决方案 1. 创建或编辑 vue.config.js 文件 Vue CLI为Webpack项目提供了简单的代理配置方式。你可以通过创建或编辑项目的根目录下的 vue.config.js 文件来设置开发服务器的代理规则&#xff1a; // vue.config.js mod…...

TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化

相关阅读 TestMAX/DFT Compilerhttps://blog.csdn.net/weixin_45791458/category_12865937.html?spm1001.2014.3001.5482 时序单元的状态 未映射的时序单元(Unmapped Sequential Cell) 在Design Compiler读取了一个RTL设计后&#xff0c;Design Compiler内置的HDL Compiler工…...

Elasticsearch:analyzer(分析器)

一、概述 可用于将字符串字段转换为单独的术语&#xff1a; 添加到倒排索引中&#xff0c;以便文档可搜索。级查询&#xff08;如 生成搜索词的 match查询&#xff09;使用。 分析器分为内置分析器和自定义的分析器&#xff0c;它们都是由若干个字符过滤器&#xff08;chara…...

蓝桥杯——异或森林

问题描述 在一个神秘的世界中&#xff0c;存在着一个称为"异或森林"的地方。异或森林中的每个树木都拥有独特的力量。肖恩进入了这片森林&#xff0c;他得到了一个任务&#xff1a;找出数组中满足条件的连续子数组&#xff0c;使得连续子数组中所有元素异或运算结果…...

第一个C++程序 - Hello World, 编译与运行

引言 编写并运行你的第一个 C 程序是学习这门语言的第一步。通过这个简单的例子&#xff0c;你将了解如何创建、编译和运行一个基本的 C 程序。本文将详细介绍每个步骤&#xff0c;并确保初学者能够顺利上手。 一、编写 "Hello World" 程序 1. 创建源代码文件 首先…...

学习threejs,PerspectiveCamera透视相机和OrthographicCamera正交相机对比

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.PerspectiveCamera透…...

测试 - 4 ( 9000 字详解 )

一&#xff1a;性能测试 1.1 什么是性能测试 性能测试和功能测试虽然都在系统测试阶段进行&#xff0c;但两者有本质区别。功能测试主要关注系统“能否完成特定功能”&#xff0c;例如一辆车是否具备四个轮子、方向盘、挡风玻璃&#xff0c;以及是否能够正常行驶。而性能测试…...

从 Coding (Jenkinsfile) 到 Docker:全流程自动化部署 Spring Boot 实战指南(简化篇)

前言 本文记录使用 Coding (以 Jenkinsfile 为核心) 和 Docker 部署 Springboot 项目的过程&#xff0c;分享设置细节和一些注意问题。 1. 配置服务器环境 在实施此过程前&#xff0c;确保服务器已配置好 Docker、MySQL 和 Redis&#xff0c;可参考下列链接进行操作&#xff1…...

NIPS2014 | GAN: 生成对抗网络

Generative Adversarial Nets 摘要-Abstract引言-Introduction相关工作-Related Work对抗网络-Adversarial Nets理论结果-Theoretical Results实验-Experiments优势和不足-Advantages and disadvantages缺点优点 结论及未来工作-Conclusions and future work研究总结未来研究方…...

WebGPU入门初识

什么是 WebGPU&#xff1f; WebGPU 是一种现代图形 API&#xff0c;旨在取代 WebGL&#xff0c;提供更高性能和更灵活的 GPU 加速能力。它基于 Vulkan、Metal 和 Direct3D 12&#xff0c;为 Web 开发者带来了类似于原生图形 API 的性能和控制力。 与 WebGL 不同&#xff0c;Web…...

Go语言基础语法

文章目录 Go语言基础语法一、引言二、基础语法1、变量声明与作用域1.1、全局变量1.2、局部变量1.3、块作用域 2、基本数据类型3、控制流程3.1、条件语句3.2、循环语句 4、函数5、并发编程 三、使用示例四、并发编程示例五、变量作用域详解六、总结 Go语言基础语法 一、引言 G…...

易基因: BS+ChIP-seq揭示DNA甲基化调控非编码RNA(VIM-AS1)抑制肿瘤侵袭性|Exp Mol Med

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 肝细胞癌&#xff08;hepatocellular carcinoma&#xff0c;HCC&#xff09;早期复发仍然是一个具有挑战性的领域&#xff0c;其中涉及的机制尚未完全被理解。尽管微血管侵犯&#xff08…...

layui动态拼接生成下拉框验证必填项失效问题

利用 jQuery 动态拼接下拉框时&#xff0c;lay-verify"required" 失效了&#xff0c;有以下几种原因。 1. <form></form>标签 加入 layui 类&#xff0c;class"layui-form" 。提交按钮上加自动提交&#xff0c;lay-submit ""; 。需…...

Speckly:基于Speckle文档的RAG智能问答机器人

前言 Speckly 是一个基于 检索增强生成 (RAG) 技术的智能问答机器人&#xff0c;它能像一位经验丰富的工程师&#xff0c;理解你的问题&#xff0c;并从 Speckle 文档中精准地找到答案。更厉害的是&#xff0c;它甚至可以帮你生成代码片段&#xff01;&#x1f680; 本文将详…...

NodeRed使用心得,实现增删改查等

使用场景介绍 在VUE中使用nodeRed实现对节点的 增删改查等功能&#xff0c;且储存成功之后下点击时启动对应流程 安装与配置 1.安装NodeRed npm install -g --unsafe-perm node-red 安装完成后&#xff0c;你可以通过运行以下命令来启动Node-RED node-red-start2. 配置文件 N…...

万物皆有解法(序)

万物皆有解法&#xff08;序&#xff09; 《万物有解》一&#xff1a;解的存在 解&#xff1a;可做解释解答&#xff0c;此文引申为原因。可做解除、解围&#xff0c;此文引申为解法、方法。 先有事物存于世-what&#xff0c;再有原因为何存-why&#xff0c;再有解法如何除去…...

OpenCV相机标定与3D重建(37)计算两幅图像之间单应性矩阵(Homography Matrix)的函数findHomography()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 找到两个平面之间的透视变换。 cv::findHomography 是 OpenCV 库中用于计算两幅图像之间单应性矩阵&#xff08;Homography Matrix&#xff09;的…...

从虚拟到现实:AI与AR/VR技术如何改变体验经济?

引言&#xff1a;体验经济的崛起 在当今消费环境中&#xff0c;产品与服务早已不再是市场竞争的唯一焦点&#xff0c;能够提供深刻感知和独特体验的品牌&#xff0c;往往更能赢得消费者的青睐。这种转变标志着体验经济的崛起。体验经济不仅仅是简单的买卖行为&#xff0c;而是通…...

Linux系统之stat命令的基本使用

Linux系统之stat命令的基本使用 一、stat命令 介绍二、stat命令帮助2.1 查询帮助信息2.2 stat命令的帮助解释 三、stat命令的基本使用3.1 查询文件信息3.2 查看文件系统状态3.3 使用格式化输出3.4 以简洁形式打印信息 四、注意事项 一、stat命令 介绍 stat 命令用于显示文件或文…...

c++ 命名空间

目录 目录 目录 namespace的定义 代码演示 先使用全局域&#xff0c;再使用namespace定义出的域 命名空间中可以定义变量/函数/类型等 命名空间可以嵌套 namespace的使用 指定命名空间访问 using将命名空间中某个成员展开 展开命名空间中全部成员 在c中&#xff0c;由…...

【实验记录】动手实现一个简单的神经网络实验(一)

最近上了“神经网络与深度学习”这门课&#xff0c;有一个自己动手实现调整神经网络模型的实验感觉还挺有记录意义&#xff0c;可以帮我巩固之前学习到的理论知识&#xff0c;所以就打算记录一下。 实验大概是使用LeNet&#xff08;卷积神经网络&#xff09;对MINIST数据集做图…...

【2024年最新】BilibiliB站视频动态评论爬虫

废话不多说&#xff0c;直接先放git仓库&#xff1a;GitHub - linyuye/Bilibili_crawler: bilibili爬虫&#xff0c;基于selenium获取oid与cookie&#xff0c;request获取api内容 〇&#xff1a;概念简述 oid&#xff1a;视频/动态的uuid&#xff0c;b站对于发布内容的通用唯…...

清空DNS 缓存

如果遇到修改了host文件&#xff0c;但是IP和域名的映射有问题的情况&#xff0c;可以尝试刷新DNS缓存。 ipconfig/flushdns win建加R建&#xff0c;然后输入cmd&#xff0c;然后回车 然后回车&#xff0c;或者点击确定按钮。 出现如下所示标识清空DNS 缓存成功。...

东土智能交通服务器助力北京市车路云一体化建设

背景及意义 北京高级别自动驾驶示范区自2020年启动建设&#xff0c;至今已经发展建设到3.0阶段&#xff0c;通州区作为3.0阶段扩建的重点区域之一&#xff0c;扩区建设范围共计约175平方公里&#xff0c;涉及18个属地街镇&#xff0c;涵盖580个路口。 作为北京市车路云一体化…...

HarmonyOS NEXT 实战之元服务:静态案例效果---妙语集语

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1完整代码案例如下&#xff1a; import { authentication } …...

python基础项目

1.联系人案例 # 导入的模块 from input_util import * import re import csv# 定义一个变量保存文件读取的信息 users {}# 封装读取文件的函数 def reader_file(path_name: str ./python基础/2024-11-15python基础项目/data/a.csv) -> None:try:with open(path_name, enco…...

mysql返回N/A

在写统计图的接口&#xff0c;sql查询一直无数据&#xff0c;给的默认值也没有实现&#xff1a; SELECTifnull( unit.num, 0 ) riskUnitCount,ifnull( EVENT.num, 0 ) riskEventCount,ifnull( measure.num, 0 ) riskMeasureCount FROMtb_companyLEFT JOIN (SELECTrisk.qyid,co…...

C++---------迭代策略与迭代器

一、迭代策略与迭代器 迭代器的概念 迭代器是一种对象&#xff0c;它提供了一种统一的方式来访问容器&#xff08;如数组、向量、列表等&#xff09;中的元素&#xff0c;而不暴露容器的内部结构。迭代器的行为类似于指针&#xff0c;可以用于遍历容器中的元素、修改元素以及…...

深入解析 Oracle 的聚合函数 ROLLUP

目录 深入解析 Oracle 的聚合函数 ROLLUP一、ROLLUP 函数概述二、ROLLUP 函数语法三、ROLLUP 实例详解&#xff08;一&#xff09;基础分组聚合&#xff08;二&#xff09;引入 ROLLUP 函数&#xff08;三&#xff09;ROLLUP 与 NULL 值&#xff08;四&#xff09;多列复杂分组…...

kipotix4靶机实战

信息收集 1.判断靶机ip 原理&#xff1a;开靶机之前nmap扫一次网段&#xff0c;再开靶机之后扫一次&#xff0c;查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务&#xff0c;系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口&#xff1a;22,80,139,…...

Java中处理if-else的几种高级方法

前言 在我看来多写几个if-else没啥大不了的&#xff0c;但是就是看起来没啥逼格&#xff0c;领导嫌弃。我根据开发的经历写几个不同的替代方法 一、枚举法替代 我先前写了一篇文章&#xff0c;可以去看看。 通过枚举替换if-else语句的解决方案_枚举代替if else c语言-CSDN博…...

LaTeX 是一种基于标记的排版系统,广泛用于创建高质量的文档,特别是在需要复杂数学公式、表格、文献引用等的场景中

LaTeX 是一种基于标记的排版系统&#xff0c;广泛用于创建高质量的文档&#xff0c;特别是在需要复杂数学公式、表格、文献引用等的场景中。以下是关于 LaTeX 的详细解释&#xff1a; 1. LaTeX 的基本概念 本质&#xff1a;LaTeX 是基于 TeX 的排版系统&#xff0c;提供了更高…...

Go入门篇:(一)golang的安装和编辑工具安装

一、前言 最近我有幸接触到Go语言,深入了解后,发现go语言确实有很多让人惊叹的地方。作为一个有着多年Java编程经验的程序员,我深深地被它所吸引,并且决定记录下我的学习之路,以便与大家分享我的经验和感悟。 与Java不同,Go语言的语法和运行效率都非常高,特别是对于并…...

【10】Selenium+Python UI自动化测试 邮件发送测试报告(某积载系统实例-04)

测试报告需要发送给相关人员&#xff0c;但每次都要在report目录下去复制太麻烦&#xff0c;可以使用邮件模块自动将生成的报告发送给相关人员 1、 新增utils文件夹&#xff0c;用于存放工具文件 在utils下新增sendmail.py文件 代码 sendmail.py import smtplib from email.…...

Playwright爬虫xpath获取技巧

示例一 <button class"MuiButtonBase-root MuiButton-root MuiLoadingButton-root MuiButton-contained MuiButton-containedPrimary MuiButton-sizeLarge MuiButton-containedSizeLarge MuiButton-colorPrimary MuiButton-fullWidth MuiButton-root MuiLoadingButton…...

运算符 - 算术、关系、逻辑运算符

引言 在编程中&#xff0c;运算符是用于执行特定操作的符号。C 提供了多种类型的运算符&#xff0c;包括算术运算符、关系运算符和逻辑运算符等。理解这些运算符及其用法对于编写高效且无误的代码至关重要。本文将详细介绍 C 中的这三种基本运算符&#xff0c;并通过实例帮助读…...