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

现在流行用什么做网站务川县住房和城乡建设局网站

现在流行用什么做网站,务川县住房和城乡建设局网站,软件开发是什么工作,主机屋做淘宝客网站首先,承认本人对于http协议认知确实不够,从来没有仔细研究这一块。 其次,这回确实要把自己十几年的理解更新一下了,主要还是自己过去没有认真研究过http协议。 这一次是这么回事,碰到一个情况,要在一次消…

首先,承认本人对于http协议认知确实不够,从来没有仔细研究这一块。

其次,这回确实要把自己十几年的理解更新一下了,主要还是自己过去没有认真研究过http协议。

这一次是这么回事,碰到一个情况,要在一次消息中传输文本和照片,这个按说很常见,过去写网页都是表单中就直接用了,也没有碰到过自己封装协议的情况。

这回呢,因为客户端是单片机,单片机这块之前也是单独提交要么文本,要么图片,没有一次性传过多种数据。

然后呢,我让kimi给我代码,结果给我的是流指针的方式

kimi错误方案一:

// 获取底层 WiFiClient 对象WiFiClient *stream = http.getStreamPtr();if (stream) {// 发送文本部分stream->print(body);// 发送图片数据stream->write(current_fb->buf, current_fb->len);// 发送结束边界stream->print(endBoundary);

WiFiClient 流指针在esp32单片机实测,压根没法正确初始化,至于原因,就不想找了,怎么测都是不行的,初始化后都是false。既然库中有这个功能,按说是能用的,也可能是我单片机中性芯片的问题。

下来事情呢,我就想自己拼接字符串给服务器。

kimi又给我错误方案二:

// 构建请求体String body;body += "--" + boundary + "\r\n";body += "Content-Disposition: form-data; name=\"message\"\r\n\r\n";body += photo_text + "\r\n";body += "--" + boundary + "\r\n";body += "Content-Disposition: form-data; name=\"image\"; filename=\"photo.jpg\"\r\n";body += "Content-Type: image/jpeg\r\n\r\n";String endBoundary = "\r\n--" + boundary + "--\r\n";// 计算总请求体长度size_t totalLen = body.length() + current_fb->len + endBoundary.length();// 设置请求体长度http.addHeader("Content-Length", String(totalLen));// 构建完整的请求体String fullBody = body;fullBody += String((char*)current_fb->buf, current_fb->len); // 直接将图片的二进制数据追加到字符串中

因为  fullBody += String((char*)current_fb->buf, current_fb->len); 其实实际加入协议的是字符串化的二进制,php服务器端 $_FILES['image'];读取的是二进制,所以肯定对不上,就会报错误3.

这个事情说明,不要完全依赖于AI,他会反复给一个错误的方向,你怎么都调不通,最终没有办法,只好自己亲自下场把内容研究透彻。

经过我和kimi的唇枪舌战,kimi终于开窍了,给我了第三个方案。【这里我要骂AI了】

// 发送HTTP POST请求Serial.println("Sending HTTP POST request");HTTPClient http;http.begin(serverURL);String boundary = "----ESP32_CAMERA_BOUNDARY";http.addHeader("Content-Type", "multipart/form-data; boundary=" + boundary);http.addHeader("User-Agent", "ESP32-Camera");http.setTimeout(60000);// 构建请求体的文本部分String body;body += "--" + boundary + "\r\n";body += "Content-Disposition: form-data; name=\"message\"\r\n\r\n";body += photo_text + "\r\n";body += "--" + boundary + "\r\n";body += "Content-Disposition: form-data; name=\"image\"; filename=\"photo.jpg\"\r\n";body += "Content-Type: image/jpeg\r\n\r\n";String endBoundary = "\r\n--" + boundary + "--\r\n";// 计算总请求体长度size_t totalLen = body.length() + current_fb->len + endBoundary.length();// 设置请求体长度http.addHeader("Content-Length", String(totalLen));// 构建完整的请求体http.addHeader("Content-Type", "multipart/form-data; boundary=" + boundary);// 发送请求http.begin(serverURL);int httpCode = http.sendRequest("POST", body.c_str(), body.length());if (httpCode == 200) {// 文本部分发送成功,现在发送图片数据http.write(current_fb->buf, current_fb->len);http.write(endBoundary.c_str(), endBoundary.length());Serial.println("Image uploaded successfully");} else {Serial.println("Failed to send text part of the request");}http.end();Serial.println("arduino HTTP request completed");

这是一个通过两次发送数据,达到目的的一个方案,这个我是可以接受的,毕竟在同一个函数任务中,但是这么一个方案明明很简单为啥AI给我搞了两天,我和他激辩很久,才告诉我。。。好吧,果然人还是要靠自己。

其实吧,这个事情还有很多解决方案,比如base64,这是经常用的,再比如使用ArduinoHttpClient库,只是这次就想死磕多类型数据协议封装,才搞了好几天。

=============================

说一下最终决定写本文的目的吧。之所以被AI的这几套方案套了三天了,根源在于自己对于http的理解有问题。也是因为没有完全了解它。

现在更正一下我的认知,我一直以为http就是一去一回的,就是送过去,返回结果。

因为用惯了api什么的,写惯了网页,之前都是这么用的,最惭愧的是以前给小弟也是这么讲的(此处脸部温度180度)。尽管我很早,在20年前就知道长连接这个事情,但是默认的访问我一直认知上认为是一去一回,然后通讯中断。

直到今天(再次脸红),我和AI沟通了原因,http1.0的协议确实默认不支持长连接,都是一去一回就完事了。本人最早用http差不多在2003年,而http1.1是1997年就出来了,所以最早的对浏览器的认知确实是有问题的,十几年来一直认为默认就是一去一回,而现在的协议肯定都是http1.1的,问了ai默认都是http1.1,也就是早就支持默认长连接,断开的话需要代码控制断开。

这次去底层拼接,才搞明白这个事,真的是愚钝了。(脸红+1)

http://www.dtcms.com/a/428778.html

相关文章:

  • 做网站需要先申请域名百度链接提交地址
  • 万年县建设银行网站拼音全称池州做网站
  • 济南网站建设流程广告设计与制作专业就业方向
  • 【LangChain】P3 Model IO 模块详解:模型调用与参数配置指南
  • 公司网站备案查询网站建设问题清单
  • 石家庄城乡建设局网站6建企业网站 硬件
  • Spring cache整合Redis
  • 网站做伪静态知识付费微网站开发
  • 【从零开始java学习|第二十一篇】包装类是干嘛的
  • 网站建设运营协议书子公司网站备案
  • 晋江市建设招投标网站自己怎么制作网页游戏
  • 衡水建立网站关键词排名优化易下拉稳定
  • 国外网站建设软件排行榜h5快速建站
  • 长沙 php企业网站系统一个公司可以备案几个网站
  • 基本信息型网站有哪些爱做网站免费模板vip
  • 咖啡网站设计模板河北手机版建站系统开发
  • 什么是烟雾病?从症状识别到治疗选择
  • C++内存泄漏排查:从基础到高级的完整工具指南
  • [MT6835] MT6835如何通过指令判断secureboot是否开启
  • 互联网信息服务算法备案深度解析:从适用对象到风险警示的科普指南
  • svn: E160028
  • 网站放到云服务器上怎么做哪个网站可以做砍价
  • Memcached 安装与服务管理指南
  • 少年三国志(本地部署游玩)
  • 凡科做网站不好网络服务公司
  • 闲置tp路由自己做网站怎么在国税网站上做实名认证吗
  • 呼市賽罕区信息网站做一顿饭工作安徽六安
  • 手机评测网站设计师网单怎么做
  • sshd 启动失败问题排查总结(没有core)
  • 网站的页面由什么组成中铁建设集团有限公司招聘官网