http请求:报unexpected EOF错误

背景

curl --location 'http://127.0.0.1:5555/album/enjoy/list' \
--header 'content-type: application/json' \
--header 'Authorization: Basic ZHJlYW1lX2FwcHYxOkFQXmR2QHpAU1FZVnhOODg=' \
--header 'Tenant-Id: 000000' \
--header 'Dreame-Auth: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOiJ6UTQwMTMxOTA4IiwiVXNlck5hbWUiOiIiLCJOaWNrTmFtZSI6IiIsIkVtYWlsIjoid2FuZ2t1bkBkcmVhbWUudGVjaCIsIkJ1ZmZlclRpbWUiOjg2NDAwLCJpc3MiOiJxbVBsdXMiLCJhdWQiOlsiR1ZBIl0sImV4cCI6MTcyMjgyMzkyMCwibmJmIjoxNzIyMjE5MTIwfQ.QxeLdiO2RDHKTaE8SuVG0zAj2yCPFplqJwMpd0F4mdE' \
--header 'Dreame-RLC: HICzcGYiZncM7QQKlxynIoLYEsIXq23r' \
--header 'Plan: B' \
--header 'dreame-api-sign: 981ccb65923b38ec2a93e6cdd344d38b' \
--header 'dreame-api-timestamp: 1722231686659' \
--header 'content-length: 102' \
--data '{"ids":[6579],"report_status":2,"timestamp":"1722231686660","sign":"f09d2a383b9781e15274bdeddc47ceea"
}'
if c.Request.Body != nil {bodyBytes, _ := io.ReadAll(c.Request.Body)defer c.Request.Body.Close()if len(bodyBytes) > 0 {//err := json.Unmarshal(bodyBytes, &formParams)d := json.NewDecoder(bytes.NewReader([]byte(bodyBytes)))d.UseNumber()err := d.Decode(&formParams)if err != nil {return "", err}}// 创建新的reader,使用bytes.NewReader// 恢复r.Body,以便可以多次读取r.Body = io.NopCloser(bytes.NewReader(bodyBytes))}

程序中有个地方需要读取body内容,打印bodyBytes的内容总是少了一截。接口还返回了unexpected EOF这个错误。之前遇到这个错误都是因为传参不是个json格式,用json在线工具验证了一下,是个正确的json格式。

问题定位

查了一下,程序中没有其他的地方执行了io.ReadAll(c.Request.Body)这个方法的地方,也不存在并发读取的情况。我把这个请求体拷贝到我的另一个程序中,没有出现读取出来的body内容被截断的情形。

这种情况可以说明传参是没有问题的,问题还是出在http底层获取body的地方。

把这个有问题的请求和调用我程序的请求对比,发现了一个不一样的地方,有问题的请求中多了一个头文件:content-length。

于是乎怀疑是这个头文件导致的。把这个头文件去掉,果然问题得以解决。

到net/http的源码中找了半天,没有找到这个逻辑。后续有时间再来寻找这个逻辑。

问题原因

确保HTTP请求头中的Content-Length字段正确反映了请求体的长度。如果Content-Length不正确,服务器可能无法读取完整的请求体。

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

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

相关文章

用AI做玄学壁纸!多篇笔记爆火,直接变现,轻松日入1000+

玄学是这两年赚钱的大风口,特别是80后、90后和00后这些年轻一代,他们对于个人财运、事业发展、爱情关系以及健康状态的预测和优化表现出浓厚的兴趣,希望通过这些方式来提升生活质量和实现个人目标。 今天就来给大家拆解其中一个赛道—用AI做…

信息安全工程师下午题

试题一(共 20 分) 阅读下列说明和图,回答问题 1 至问题 5,将解答填入答题纸的对应栏内。【说明】已知某公司网络环境结构主要由三个部分组成,分别是 DMZ 区、内网办公区和生产区,其拓扑结构如图 1-1 所示。信息安全部的王工正在按…

【BES2500x系列 -- RTX5操作系统】系统执行流程 -- 引导程序(boot loader)--(十)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

地球磁场的形成、变迁、特点

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

Unity多客户端位置同步信息

书接上文,有了一个基本的网络同步消息的服务器,客户端这边其实要做的工作就简单许多。 如果对位置信息的保密程度没那么高的话,可以放在客户端处理这部分的逻辑。 即一个客户端移动的时候,另一个客户端跟着移动,基本…

【电控笔记-xuan】各种估测器扰动估计性能比较

各种扰动观测器观测结果 蓝色: 扰动值 隆博戈估测器扰动补偿 论文53disturb扰动补偿 2order eso 观测

LabVIEW学习-LabVIEW处理带分隔符的字符串从而获取数据

带分隔符的字符串很好处理,只需要使用"分隔符字符串至一维字符串数组"函数或者"一维字符串数组至分隔符字符串"函数就可以很轻松地处理带分隔符地字符串。 这两个函数所在的位置为: 函数选板->字符串->附加字符串函数->分…

APT 安装软件详细教程

文章目录 APT 安装软件详细教程APT 概述APT 的基本命令APT 命令详解安装软件包更新和升级软件包删除软件包搜索和查找软件包管理软件包依赖清理软件包缓存APT 配置软件源配置自定义软件源常见问题及解决方案解决软件包依赖问题处理软件源错误其他常见问题使用 APT 的最佳实践总…

在Postman中引用JS库

前言 在做接口测试时,出于安全因素,请求参数需要做加密或者加上签名才能正常请求,例如:根据填写的请求参数进行hash计算进行签名。postman作为主流的接口调试工具也是支持请求预处理的,即在请求前使用JavaScript脚本对…

昇思MindSpore学习入门-自动混合精度

混合精度(Mix Precision)训练是指在训练时,对神经网络不同的运算采用不同的数值精度的运算策略。在神经网络运算中,部分运算对数值精度不敏感,此时使用较低精度可以达到明显的加速效果(如conv、matmul等&am…

OSI七层模型详解

OSI七层模型 OSI(Open System Interconnect),即开放式系统互连。 一般都叫OSI参考模型,是ISO组织在1985年研究的网络互连模型。该体系结构标准定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、…

[玄机]流量特征分析-常见攻击事件 tomcat

[玄机]流量特征分析-常见攻击事件 tomcat 题目做法及思路解析(个人分享) Tomcat是一个开源的Java Servlet容器,它实现了Java Servlet和JavaServer Pages (JSP) 技术,提供了一个运行这些应用程序的Web服务器环境。Tomcat由A…

go程序在windows服务中优雅开启和关闭

本篇主要是讲述一个go程序,如何在windows服务中优雅开启和关闭,废话不多说,开搞!!!   使用方式:go程序 net服务启动 Ⅰ 开篇不利 Windows go进程编译后,为一个.exe文件,直接执行即…

语言转文字

因为工作原因需要将语音转化为文字,经常搜索终于找到一个免费的好用工具,记录下使用方法 安装Whisper 搜索Colaboratory 右上方链接服务 执行 !pip install githttps://github.com/openai/whisper.git !sudo apt update && sudo apt install f…

NSSRound#4 Team

[NSSRound#4 SWPU]1zweb 考察&#xff1a;phar的反序列化 1.打开环境&#xff0c;审计代码 1.非预期解 直接用file伪协议读取flag,或直接读取flag file:///flag /flag 2.正常解法 用读取文件读取index.php,upload.php的源码 index.php: <?php class LoveNss{publi…

hadoop学习(一)

一.hadoop概述 1.1hadoop优势 1&#xff09;高可靠性&#xff1a;Hadoop底层维护多个数据副本&#xff0c;即使Hadoop某个计算元素或存储出现故障&#xff0c;也不会导致数据的丢失。 2&#xff09;高扩展性&#xff1a;在集群间分配任务数据&#xff0c;可方便扩展数以千计…

c++ 内存管理(newdeletedelete[])

因为在c里面新增了类&#xff0c;所以我们在有时候会用malloc来创建类&#xff0c;但是这种创建只是单纯的开辟空间&#xff0c;没有什么默认构造的。同时free也是free的表面&#xff0c;如果类里面带有指针指向堆区的成员变量就会free不干净。 所以我们c增加了new delete和de…

Python --Pandas库基础方法(2)

文章目录 Pandas 变量类型的转换查看各列数据类型改变数据类型 重置索引删除行索引和切片seriesDataFrame取列按行列索引选择loc与iloc获取 isin()选择query()的使用排序用索引排序使用变量值排序 修改替换变量值对应数值的替换 数据分组基于拆分进行筛选 分组汇总引用自定义函…

springcloud RocketMQ 客户端是怎么走到消费业务逻辑的 - debug step by step

springcloud RocketMQ &#xff0c;一个mq消息发送后&#xff0c;客户端是怎么一步步拿到消息去消费的&#xff1f;我们要从代码层面探究这个问题。 找的流程图&#xff0c;有待考究。 以下我们开始debug&#xff1a; 拉取数据的线程&#xff1a; PullMessageService.java 本…