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

springmvc http请求,支持get,post,附件传输和参数传输

主要解决http请求支持get,post,put,delete等常规方法,支持@RequestParam,@RequestBody,@PathVariable等参数格式传输,支持传输附件同时传递参数等,主体代码如下:

package mes.client.action;import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSON;
import mes.client.pojo.po.CommonEntityPo;
import mes.client.pojo.vo.ResponseInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import java.util.Map;public class MesMomConnectAction {private static Logger logger = LoggerFactory.getLogger(MesMomConnectAction.class);/*** 无请求体body,向指定URL发送方法的请求** @param url   发送请求的URL* @return URL 所代表远程资源的响应结果*/public static ResponseInfo getHttpParamReq(String url,String requestMethodType) {StringBuilder result = new StringBuilder();BufferedReader in = null;HttpURLConnection connection = null;try {URL getUrl = new URL(url);// 打开和URL之间的连接connection = (HttpURLConnection) getUrl.openConnection();// 在connect之前,设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");connection.setRequestProperty("Charsert", "UTF-8");//添加必须的头部信息addHeader(connection);// 配置本次连接的Content-type,form表单是"application/x-www-form-urlencoded",json是"application/json"等// 根据需求自己调整Content-typeconnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");// 设置连接主机服务器的超时时间:15000毫秒connection.setConnectTimeout(15000);// 设置读取远程返回的数据时间:60000毫秒connection.setReadTimeout(60000);// 设置连接方式:getconnection.setRequestMethod(requestMethodType);// 建立实际的连接,可不写,注意connection.getOutputStream会隐含的进行connect。connection.connect();// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result.append(line);}ResponseInfo responseInfo = JSON.parseObject(result.toString(), ResponseInfo.class);if(responseInfo.getStatusCode() == null){return getFailResponse(result.toString());}return responseInfo;} catch (Exception e) {logger.error("调用MES4.0接口异常",e);return getExceptionResponse(e);}// 使用finally块来关闭输入流finally {try {if (in != null) {in.close();}if (connection != null) {//关闭连接connection.disconnect();}} catch (Exception e2) {e2.printStackTrace();}}}/** * @description: get请求* @date: 2023-10-16 16:58:30 * @param url * @return ResponseInfo */public static ResponseInfo sendGet(String url){return getHttpParamReq(url,"GET");}/** * @description:方法说明* @date: 2023-10-16 15:42:33 * @param url * @return ResponseInfo */public static ResponseInfo sendDelete(String url) {return getHttpParamReq(url,"DELETE");}/** * @description: post请求* @date: 2023-10-16 17:04:07 * @param url * @param param * @return ResponseInfo */public static ResponseInfo sendPost(String url, CommonEntityPo param){return getHttpBodyReq(url,param,"POST");}/** * @description: put请求* @date: 2023-10-16 17:05:05 * @param url * @param param * @return ResponseInfo */public static ResponseInfo sendPut(String url, CommonEntityPo param){return getHttpBodyReq(url,param,"PUT");}/*** 有请求体body,向指定 URL 发送方法的请求** @param url   发送请求的 URL* @param param 请求参数。* @return 所代表远程资源的响应结果*/public static ResponseInfo getHttpBodyReq(String url, CommonEntityPo param, String requestMethodType) {BufferedReader in = null;InputStream inputStream = null;HttpURLConnection connection = null;StringBuilder result = new StringBuilder();try {URL postUrl = new URL(url);// 打开和URL之间的连接connection = (HttpURLConnection) postUrl.openConnection();// 在connect之前,设置通用的请求属性connection.setRequestProperty("accept", "*/*");connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");connection.setRequestProperty("Charsert", "UTF-8");//添加一些必要的请求头信息addHeader(connection);//connection.setRequestProperty("Authorization","Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJiUlR5WGJ0Q05aaS1fUkVKSGUwNHNEd2RYaTNVSHRLOWZoWndXdGdPdWdNIn0.eyJleHAiOjE2OTc0MzM5NDksImlhdCI6MTY5NzAwMTk0OSwiYXV0aF90aW1lIjoxNjk2NzYwOTcxLCJqdGkiOiJiMjcyYzM2My1kMDQ1LTRhMTAtOTc5Ni0xZGE0ZmYwNDkxYTkiLCJpc3MiOiJodHRwOi8vaWRtLWRldi5zdW53b2RhLWV2Yi5jb20vYXV0aC9yZWFsbXMvc3RhbmRhcmQiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiNmIxOTE4NWYtODcxZi00NTk1LWIxZTUtYTIwZTQ1MzcyZjQ3IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoibnRzLWZyb250LXRlc3QiLCJub25jZSI6Ijc3MjBkM2QyLTg3NDQtNDI3Yy1iMzBhLTE5YWU2ZDM5NzY3NiIsInNlc3Npb25fc3RhdGUiOiJhNDJlNzU0ZC04MmRjLTQxNTgtOWQyYi1iZWZkNzNmMGI4NzUiLCJhY3IiOiIwIiwiYWxsb3dlZC1vcmlnaW5zIjpbIioiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyJhY2NvdW50Ijp7InJvbGVzIjpbIm1hbmFnZS1hY2NvdW50IiwibWFuYWdlLWFjY291bnQtbGlua3MiLCJ2aWV3LXByb2ZpbGUiXX19LCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJuYW1lIjoi6IuP5pWPIiwicHJlZmVycmVkX3VzZXJuYW1lIjoieHdkMTYiLCJnaXZlbl9uYW1lIjoi6IuP5pWPIiwibG9jYWxlIjoiemgtQ04ifQ.AUnf5meZWqYNYbfbzyqY3C9WoiL-ISCoVebvtJV-1EF8iQe2FXVEE22CLKnTvHBEoY-W62F8LtG3eW3B5LP54WBXq0JyxnMSLTjqZWMfvYmxNLfjO3rcviK9jAqqxrvLy1IR4ZVFz8ez4ThfCr3TrbammQvZgxF1jie_hx_-3RTiLTra1qyTUj8CrFRaVDBvWTt8nDu6FsRBAkqImPgZ3Jdhf-WDeVlwOkDCGPd5cUQ9KAQs2JUMY4H_jC9cgcSpQuUjNOQOnu1lnYjnsREswR7iBNSkaW6DlRry-HhD8FRs1QLOwKGcgFCBU7O9O-NCH8EyrZOriSpiPaElE2-i2Q");connection.setConnectTimeout(15000);connection.setReadTimeout(60000);// 发送POST请求必须设置如下两行,参数要放在http正文内connection.setDoOutput(true);connection.setDoInput(true);// 默认是 GET方式connection.setRequestMethod(requestMethodType);// Post 请求不使用缓存connection.setUseCaches(false);// 配置连接的Content-type,form表单是"application/x-www-form-urlencoded",json是"application/json"等connection.setRequestProperty("Content-Type", "application/json");connection.connect();//参数处理if(param != null){//打印接口入参logger.info("post请求接口入参:{}",JSON.toJSONString(param.getData()));BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), "UTF-8"));writer.write(JSON.toJSONString(param.getData()));writer.close();}// 定义BufferedReader输入流来读取URL的响应in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));String line;while ((line = in.readLine()) != null) {result.append(line);}ResponseInfo responseInfo = JSON.parseObject(result.toString(), ResponseInfo.class);if(responseInfo.getStatusCode() == null){return getFailResponse(result.toString());}return responseInfo;} catch (Exception e) {logger.error("调用MES4.0接口异常",e);return getExceptionResponse(e);} finally {try {if (in != null) {in.close();}if(inputStream != null){inputStream.close();}if (connection != null) {//关闭连接connection.disconnect();}} catch (IOException ex) {ex.printStackTrace();}}}/*public static void main(String[] args) throws IOException {//=========================================邮箱==================================================List<Map<String, Object>> files = new ArrayList<>();Map<String, Object> map = new HashMap();File file = new File("C:\\Users\\86188\\Desktop\\t1.png");map.put("name", "t1.png");map.put("file", file);files.add(map);Map<String, Object> param = new HashMap();param.put("data", "data");sendFileUrl("http://127.0.0.1:8080/sendReport", files, param);}*//** * @description: 有附件和参数的发送方法的请求(调用方式参考实例如上方法)* @date: 2023-10-23 10:41:40 * @param actionUrl :请求链接url* @param files : 附件* @param param :请求参数* @return ResponseInfo */public static void sendFileUrl(String actionUrl, List<Map<String, Object>> files, Map<String, Object> param){HttpURLConnection conn = null;DataOutputStream outStream = null;try {final String NEWLINE = "\r\n";String BOUNDARY = java.util.UUID.randomUUID().toString();String PREFIX = "--", LINEND = "\r\n";String MULTIPART_FROM_DATA = "multipart/form-data";String CHARSET = "UTF-8";URL uri = new URL(actionUrl);conn = (HttpURLConnection) uri.openConnection();conn.setConnectTimeout(15000);conn.setReadTimeout(60000);conn.setDoInput(true);// 允许输入conn.setDoOutput(true);// 允许输出conn.setUseCaches(false);conn.setRequestMethod("POST"); // Post方式conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Charsert", "UTF-8");conn.setRequestProperty("Accept", "application/json;charset=UTF-8");conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY);outStream = new DataOutputStream(conn.getOutputStream());// 获取表单中上传控件之外的控件数据,写入到输出流对象(根据上面分析的抓包的内容格式拼凑字符串);if (param != null && !param.isEmpty()) { // 这时请求中的普通参数,键值对类型的,相当于上面分析的请求中的username,可能有多个for (Map.Entry<String, Object> entry : param.entrySet()) {String key = entry.getKey(); // 键,相当于上面分析的请求中的usernameObject value = param.get(key); // 值,相当于上面分析的请求中的sdafdsaoutStream.writeBytes(PREFIX + BOUNDARY + NEWLINE); // 像请求体中写分割线,就是前缀+分界线+换行outStream.writeBytes("Content-Disposition: form-data; "+ "name=\"" + key + "\"" + NEWLINE); // 拼接参数名,格式就是Content-Disposition: form-data; name="key" 其中key就是当前循环的键值对的键,别忘了最后的换行outStream.writeBytes(NEWLINE); // 空行,一定不能少,键和值之间有一个固定的空行outStream.write(value.toString().getBytes("UTF-8")); // 将值写入,用字节流防止乱码// 或者写成:dos.write(value.toString().getBytes(charset));outStream.writeBytes(NEWLINE); // 换行}}// 发送文件数据if (files != null)for (Map<String, Object> file : files) {StringBuilder sb1 = new StringBuilder();sb1.append(PREFIX);sb1.append(BOUNDARY);sb1.append(LINEND);sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""+ file.get("name") + "\"" + LINEND);sb1.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINEND);sb1.append(LINEND);outStream.write(sb1.toString().getBytes("utf-8"));    //getBytes()不加utf-8 传输中文名附件时,接收附件的地方解析文件名会乱码InputStream is = new FileInputStream((File) file.get("file"));byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outStream.write(buffer, 0, len);}is.close();outStream.write(LINEND.getBytes());}// 请求结束标志byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();outStream.write(end_data);outStream.flush();// 得到响应码int res = conn.getResponseCode();//if (res == 200) {InputStream in = conn.getInputStream();InputStreamReader isReader = new InputStreamReader(in,"UTF-8");BufferedReader bufReader = new BufferedReader(isReader);String line = "";String data = "";while ((line = bufReader.readLine()) != null) {data += line;}logger.info("读取后最后结果:" + data);//}} catch (Exception e) {e.printStackTrace();} finally {try {//关闭流if(outStream != null){outStream.close();}//关闭连接if(conn != null){conn.disconnect();}} catch (IOException e) {e.printStackTrace();}}}//multipartFile格式文件发送public static void sendMultipartFileUrl(String actionUrl, MultipartFile file, Map<String, Object> param){HttpURLConnection conn = null;DataOutputStream outStream = null;try {final String NEWLINE = "\r\n";String BOUNDARY = java.util.UUID.randomUUID().toString();String PREFIX = "--", LINEND = "\r\n";String MULTIPART_FROM_DATA = "multipart/form-data";String CHARSET = "UTF-8";URL uri = new URL(actionUrl);conn = (HttpURLConnection) uri.openConnection();conn.setConnectTimeout(15000);conn.setReadTimeout(60000);conn.setDoInput(true);// 允许输入conn.setDoOutput(true);// 允许输出conn.setUseCaches(false);conn.setRequestMethod("POST"); // Post方式conn.setRequestProperty("connection", "keep-alive");conn.setRequestProperty("Charsert", "UTF-8");conn.setRequestProperty("Accept", "application/json;charset=UTF-8");conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA+ ";boundary=" + BOUNDARY);outStream = new DataOutputStream(conn.getOutputStream());// 获取表单中上传控件之外的控件数据,写入到输出流对象(根据上面分析的抓包的内容格式拼凑字符串);if (param != null && !param.isEmpty()) { // 这时请求中的普通参数,键值对类型的,相当于上面分析的请求中的username,可能有多个for (Map.Entry<String, Object> entry : param.entrySet()) {String key = entry.getKey(); // 键,相当于上面分析的请求中的usernameObject value = param.get(key); // 值,相当于上面分析的请求中的sdafdsaoutStream.writeBytes(PREFIX + BOUNDARY + NEWLINE); // 像请求体中写分割线,就是前缀+分界线+换行outStream.writeBytes("Content-Disposition: form-data; "+ "name=\"" + key + "\"" + NEWLINE); // 拼接参数名,格式就是Content-Disposition: form-data; name="key" 其中key就是当前循环的键值对的键,别忘了最后的换行outStream.writeBytes(NEWLINE); // 空行,一定不能少,键和值之间有一个固定的空行outStream.write(value.toString().getBytes("UTF-8")); // 将值写入,用字节流防止乱码// 或者写成:dos.write(value.toString().getBytes(charset));outStream.writeBytes(NEWLINE); // 换行}}// 发送文件数据if (file != null){StringBuilder sb1 = new StringBuilder();sb1.append(PREFIX);sb1.append(BOUNDARY);sb1.append(LINEND);sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\""+ file.getOriginalFilename() + "\"" + LINEND);sb1.append("Content-Type: application/octet-stream; charset="+ CHARSET + LINEND);sb1.append(LINEND);outStream.write(sb1.toString().getBytes("utf-8"));    //getBytes()不加utf-8 传输中文名附件时,接收附件的地方解析文件名会乱码InputStream is = file.getInputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = is.read(buffer)) != -1) {outStream.write(buffer, 0, len);}is.close();outStream.write(LINEND.getBytes());}// 请求结束标志byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes();outStream.write(end_data);outStream.flush();// 得到响应码int res = conn.getResponseCode();//if (res == 200) {InputStream in = conn.getInputStream();InputStreamReader isReader = new InputStreamReader(in,"UTF-8");BufferedReader bufReader = new BufferedReader(isReader);String line = "";String data = "";while ((line = bufReader.readLine()) != null) {data += line;}logger.info("读取后最后结果:" + data);//}} catch (Exception e) {e.printStackTrace();} finally {try {//关闭流if(outStream != null){outStream.close();}//关闭连接if(conn != null){conn.disconnect();}} catch (IOException e) {e.printStackTrace();}}}/** * @description: 需要额外添加一些请求头信息* @date: 2023-10-11 14:42:07 */private static void addHeader(HttpURLConnection connection){//针对一些第三方系统加密header}/** * @description: 返回请求异常信息* @date: 2023-10-15 17:43:36 * @param e * @return ResponseInfo */private static ResponseInfo getExceptionResponse(Exception e){ByteArrayOutputStream baos = new ByteArrayOutputStream();e.printStackTrace(new PrintStream(baos));String failMsg = baos.toString();return getFailResponse(failMsg);}/** * @description: 封装返回信息结果* @date: 2023-10-19 19:44:23 * @param failMsg * @return ResponseInfo */private static ResponseInfo getFailResponse(String failMsg){ResponseInfo responseInfo = new ResponseInfo();responseInfo.setStatusCode(400);responseInfo.setMessage(failMsg);return responseInfo;}
}

相关文章:

springmvc http请求,支持get,post,附件传输和参数传输

主要解决http请求支持get,post,put,delete等常规方法&#xff0c;支持RequestParam,RequestBody,PathVariable等参数格式传输&#xff0c;支持传输附件同时传递参数等&#xff0c;主体代码如下&#xff1a; package mes.client.action;import cn.hutool.crypto.digest.DigestUt…...

linux性能分析(七)CPU性能篇(二)怎么理解平均负载

一 怎么理解平均负载 ① 如何查看平均复杂 查看系统负载的命令&#xff1a; top、uptime、w、cat /proc/loadavg、tload /proc/loadavg 思考&#xff1a; uptime每列输出的含义?重点&#xff1a; 当前时间、系统运行时间、正在登录用户数、平均负载 ② 思考&#xff1…...

PostgreSQL12中浮点数输出算法优化带来的小问题

最近碰到同事发来这样两个SQL&#xff0c;开发反馈输出的结果异常。 bill# select 0.1284*100::float;?column? --------------------12.839999999999998 (1 row)bill# select (0.1284*100)::float;float8 --------12.84 (1 row) 乍一看其实能看出明显的区别&#xff0c;由于…...

Hive安装配置笔记

版本说明 hadoop-3.3.6&#xff08;已安装&#xff09; mysql-8&#xff08;已安装&#xff09; hive-3.1.3 将hive解压到对应目录后做如下配置&#xff1a; 基本配置与操作 1、hive-site <configuration><!-- jdbc连接的URL --><property><name>ja…...

前端数据可视化之【Echarts下载使用】

目录 &#x1f31f;下载&#x1f31f;浏览器引入&#x1f31f;模块化引入 &#x1f31f;使用&#x1f31f;基本使用步骤 &#x1f31f;绘制一个简单的图表&#x1f31f;写在最后 &#x1f31f;下载 &#x1f31f;浏览器引入 官网下载界面&#xff1a;官方网站 或 Echarts中文…...

本机计算机上的mysql启动后停止

本机计算机上的mysql启动后停止 原因&#xff1a;mysql5.0和mysql8.0配置不同 把my.ini改成以下设置然后再重新 mysqld --initialize-insecure --usermysql然后再启动 net start mysqlmysql8.0 下面的路劲可自定义 [client] default-character-setutf8 [mysql] default-cha…...

Java中ReentrantLock测试线程的安全

使用场景 当需要在多线程环境下保证共享资源的安全访问时&#xff0c;可以使用Java中的ReentrantLock来实现线程安全。ReentrantLock是一个可重入的互斥锁&#xff0c;它提供了与synchronized关键字类似的功能&#xff0c;但更加灵活和扩展性强。 下面是一个使用ReentrantLoc…...

Vue-dvadmin-d2-crud-plus-常用配置-row-handle-columns-options

文章目录 1.row-handle columnHeader width minWidth fixed align renderHeader edit view remove remove.confirm remove.confirmTitle remove.confirmText custom 范例1 范例2 2.columns title key width minWidth fixed renderHeader sortable sortMethod sortBy sortOrders…...

【OpenCV实现图像的算数运算,性能测试和优化,改变颜色空间】

文章目录 OpenCV功能概要图像的算数运算性能测试和优化改变颜色空间对象追踪 OpenCV功能概要 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习库&#xff0c;提供了丰富的图像处理和计算机视觉算法。它支持多种编程语言&…...

多级缓存入门

文章目录 什么是多级缓存JVM进程缓存环境准备安装MySQL导入Demo工程导入商品查询页面 初识Caffeine Lua语法初识Lua第一个lua程序变量和循环Lua的数据类型声明变量循环 条件控制、函数函数条件控制 多级缓存安装OpenRestyOpenResty快速入门反向代理流程OpenResty监听请求编写it…...

CentOS卸载LVM磁盘的方法

在客户环境上遇到一个问题&#xff0c;本身的磁盘满了&#xff0c;需要把没有用的lvm逻辑卷卸载掉&#xff0c;然后挂上去&#xff0c;下面记录一下过程。 卸载原磁盘 umount /data # 如果/data目录正在被其他进程使用中&#xff0c;则使用fuser强制关闭&#xff0c;然后Umou…...

ChatGPT:Spring Boot和Maven——Java应用开发的关键工具和区别

ChatGPT&#xff1a;Spring Boot和Maven——Java应用开发的关键工具和区别 Springboot是什么&#xff1f; ChatGPT&#xff1a; Spring Boot是一个用于构建Java应用程序的开源框架&#xff0c;它是Spring Framework的一部分&#xff0c;但旨在简化Spring应用程序的开发。Sprin…...

智能振弦传感器:参数智能识别技术的重要科技创新

智能振弦传感器&#xff1a;参数智能识别技术的重要科技创新 智能振弦传感器是一种能够自动识别传感器参数的高科技产品。它的研发得益于河北稳控科技的不断创新和努力&#xff0c;其电子标签专用读数模块模块TR01将传感器生产和标定过程实现了自动化。该模块将温度电阻两芯线…...

tooltip实现悬停内容染色

一: 通过highlight.js项目实现对json字符串的染色高亮 此项目是jsp文件,并且引用了element-ui/highlight.js的组件 二: 实现效果 三: 代码实现 关键点在于成功引入相关的js及css&#xff0c;并且在tooltip渲染时进行数据染色。再将染色后的数据放到v-html中进行页面渲染(关键方…...

“深入探讨Java JUC中的ReentrantLock锁:实现多线程同步与并发控制“

简介 1、从Java5开始&#xff0c;Java提供了一种功能更强大的线程同步机制——通过显式定义同步锁对象来实现同步&#xff0c;在这种机制下&#xff0c;同步锁由Lock对象充当。 2、Lock 提供了比synchronized方法和synchronized代码块更广泛的锁定操作&#xff0c;Lock允许实…...

Java|学习|多线程

1.多线程的一些概念 进程&#xff1a;是正在运行的程序 是系统进行资源分配和调用的独立单位 每一个进程都有它自己的内存空间和系统资源。 线程&#xff1a;是进程中的单个顺序控制流&#xff0c;是一条执行路径。 单线程&#xff1a;一个进程如果只有一条执行路径&#xff0…...

【Python机器学习】零基础掌握VotingClassifier集成学习

为什么一些数据预测模型在复杂场景下表现不如预期? 在当今数据驱动的世界中,企业和研究者面临着如何从大量数据中提取有价值信息的挑战。假设一个电商公司想要通过用户行为数据预测产品销量,通常会使用单一的算法模型,如逻辑回归、随机森林或朴素贝叶斯。但问题来了,如果…...

深入了解JavaScript中的AJAX和HTTP请求

在现代Web开发中&#xff0c;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;和HTTP请求被广泛应用于实现动态交互式网页。本文将深入探讨AJAX的概念、工作原理以及使用方法。 什么是AJAX&#xff1f; AJAX是一种利用JavaScript和HTTP请求与服务器进行异步通信的…...

第87步 时间序列建模实战:LSTM回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们介绍大名鼎鼎的LSTM回归。 同样&#xff0c;这里使用这个数据&#xff1a; 《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal…...

GB/T28181协议介绍

GB/T28181协议介绍 文章目录 GB/T28181协议介绍总体介绍GB/T28181基本结构GB/T28181关键协议流程设备注册设备目录查询实时视频播放流程 GB/T28181协议总结 说到GB/T28181协议&#xff0c;如果你是从事视频监控领域的工作&#xff0c;那对他一定不陌生&#xff0c;在公共安全、…...

OpenClaw调试进阶:百川2-13B-4bits量化模型响应日志分析

OpenClaw调试进阶&#xff1a;百川2-13B-4bits量化模型响应日志分析 1. 为什么需要关注模型响应日志 上周我在用OpenClaw对接百川2-13B-4bits量化模型时&#xff0c;遇到了一个奇怪的现象&#xff1a;自动化任务执行到一半突然中断&#xff0c;控制台只显示"模型响应异常…...

Vite多入口页面配置实战:从单页应用到多页项目的平滑升级指南

Vite多入口页面配置实战&#xff1a;从单页应用到多页项目的平滑升级指南 当你已经用Vite构建了一个优雅的单页应用&#xff0c;突然业务需求要求你扩展为多页项目时&#xff0c;是否感到手足无措&#xff1f;别担心&#xff0c;这种架构演进在项目成长过程中再常见不过了。作为…...

2026顶空气体分析仪TOP5|权威评测与选购指南

顶空气体分析仪&#xff0c;又叫顶空残氧仪&#xff0c;主要用于测量封闭容器中顶部空间氧气与二氧化碳的浓度。随着市场需求越来越大&#xff0c;市面上品牌五花八门&#xff0c;新手选购易踩雷、难抉择。本次榜单严格遵循客观数据真实口碑原则&#xff0c;综合公司背景、技术…...

电池包结构仿真与力学分析指南

电池包结构仿真&#xff0c;电池包力学仿真&#xff0c;电池包CAE分析&#xff0c;新能源电池电池CAE分析&#xff0c;结构仿真&#xff0c;力学分析附带相对应的模型文件,指导书&#xff0c;可直接自己跟着做分析另外附赠完整电池包模型一、概述随着新能源汽车的飞速发展&…...

如何突破Cursor AI使用限制?解锁永久免费Pro功能的终极指南

如何突破Cursor AI使用限制&#xff1f;解锁永久免费Pro功能的终极指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached you…...

成为技术专家的捷径?不,只有长期主义的坚持

在软件测试领域&#xff0c;我们常常被一种“速成”的幻象所包围。铺天盖地的培训广告承诺“三个月精通自动化测试”、“六周成为性能测试专家”&#xff0c;各种“一招鲜”的测试工具和“万能”的测试框架被包装成通往成功的捷径。对于身处其中、渴望突破职业瓶颈的测试工程师…...

前端开发者的福音:5分钟用Mergely.js给你的网页加个在线文本对比器

零成本打造专业级文本对比工具&#xff1a;Mergely.js全攻略 在代码审查、合同修订或是配置管理场景中&#xff0c;文本差异对比是个高频刚需。传统方案要么需要后端支持&#xff0c;要么功能简陋。现在&#xff0c;只需5分钟和几行JavaScript代码&#xff0c;你就能为Web项目嵌…...

Spring AI 流式输出底层原理解析

在 AI 应用开发中&#xff0c;流式输出早已成为提升用户体验的核心能力——像 ChatGPT 那样的打字机式实时回复&#xff0c;既能避免用户长时间干等&#xff0c;又能解决长连接超时问题&#xff0c;是 AI 产品的必备特性。 一、流式输出的两种技术&#xff0c;不是对立而是“底…...

DeepSeek风格迁移降AI怎么用?从0到1完整操作教程

第一次操作的话&#xff0c;照着下面的步骤来&#xff0c;15分钟内搞定DeepSeek风格迁移降AI、降AI、降AIGC率。 工具选嘎嘎降AI&#xff08;www.aigcleaner.com&#xff09;&#xff0c;达标率99.26%&#xff0c;有退款保障&#xff0c;操作也不复杂。 准备工作 需要准备的&…...

手把手教你用VSCode给Ai-WB2-12F烧录固件(含串口调试技巧)

手把手教你用VSCode给Ai-WB2-12F烧录固件&#xff08;含串口调试技巧&#xff09; 在物联网开发中&#xff0c;固件烧录是最基础也是最重要的环节之一。对于Ai-WB2-12F这款热门Wi-Fi/BLE双模模组&#xff0c;掌握高效的烧录方法能显著提升开发效率。本文将详细介绍如何利用VSC…...