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

重庆奉节网站建设公司推荐天津百度推广代理商

重庆奉节网站建设公司推荐,天津百度推广代理商,电子商务网站建设规划报告书,中小型企业电子商务网站建设首先,承认本人对于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/wzjs/502093.html

相关文章:

  • 网站建设资质备案seo优化关键词排名
  • 2017网站建设报价方案网络营销方法有哪几种
  • 网站注册系统用什么做凡科网站官网
  • 正规手机网站怎么做深圳市前十的互联网推广公司
  • 网站建设规模用什么形容怎么在平台上做推广
  • 公司禁用网站怎么做百度网址大全旧版本
  • 杭州网站模板建站长沙网站优化体验
  • 哪个网站是做红酒酒的好看的html网页
  • 微信营销软件下载qq排名优化网站
  • 有网站加金币的做弊器吗6武汉外包seo公司
  • 公司自己做网站多少费用免费发广告的网站大全
  • 做网站的市场关键词排名怎样
  • wordpress xiu themasseo推广的特点
  • 使用免费的代码做网站百度下载app下载安装
  • 在线购物商城网站建设谷歌seo教程
  • 网站架构设计师岗位要求做个网站需要多少钱
  • 有网站了小程序怎么做西安百度推广怎么做
  • 河北建设厅官方网站电话小红书关键词搜索量查询
  • 网站建设使用的基本技术百度竞价推广代理
  • wordpress 新建数据表手机端网站优化
  • 网站开发时间一般是百度人工客服在线咨询电话
  • 汽车服务站建站流程自己的网站怎么建立
  • 如何在12366网站上做实名认证微博推广技巧
  • 衡水网站建设培训学校品牌关键词排名优化怎么做
  • 中山网站制作网页百度发布信息怎么弄
  • 电子商务方案设计案例钦州seo
  • 网站制作经典案例现在有哪些推广平台
  • php和c 做网站的区别互动营销公司
  • 做网站技术人员seo网站优化培训公司
  • 视频播放网站模板新闻播报最新