接口基础知识6:详解http request body(一篇讲完常见请求体)

news2024/11/15 16:01:25

课程大纲

一、定义

HTTP请求体(HTTP Request body):HTTP请求消息的可选部分,仅在请求方法支持且需要发送数据时使用。

POST方法、PUT方法有请求体,GET和HEAD方法没有请求体。

请求头和请求体之间会有一个空行,告诉服务器请求头部到此为止。

请求体中包含的实际数据类型和格式取决于请求头中的 Content-Type字段,所以每一种格式的请求体必须设置对应的请求头Content-Type字段。

请求头&请求体的区别

请求头

指定接口公共的部分(无论什么接口都要设置的项)。

请求体

指定接口定义的数据、变量,会因接口不同而不同。

请求头&请求体的联系

请求头和特定格式的请求体组合,发送服务器所需的数据。

二、7种常见请求体类型

(postman请求体格式选择区)

1、URL编码表单

请求头

Content-Type: application/x-www-form-urlencoded

简介

默认的请求类型,只能上传键值对(key-value)。

2、(常用)form-data表单

请求头

Content-Type: multipart/form-data

简介

可以上传键值对,也可以上传文件。可以同时上传二者,字段之间会有分隔,不互相影响。

3、(很少用)binary二进制数据

请求头

Content-Type: application/octet-stream

简介

只可以上传二进制数据,通常用来上传文件,一次只能上传一个文件。(数据被当作一系列字节处理)

raw:是postman中定义的一类,表示可上传任意格式的文本,向下看细分。

4、(最常用)json格式

请求头

Content-Type: application/json

简介

参数以json字符串传递。

(是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。)

5、纯文本格式

请求头

Content-Type: text/plain

简介

纯文本的形式,不含任何数据类型或结构描述符。

(如果浏览器获取到这种文件,不会对其进行处理)

6、html网页格式

请求头

Content-Type: text/html

简介

html网页格式。

(若浏览器获取到这种文件,会自动调用html的解析器对文件进行相应的处理。)

7、(极少)xml可扩展标记语言格式

请求头

Content-Type: text/xml

和 Content-Type: application/xml

简介

xml格式,目前非常少用,2种有细微差别,一般推荐使用application/xml。

请求格式详解如下:

2.1 (默认)url编码表单

默认的请求类型,最常见最基础的请求体类型,通常用于HTML表单提交。

1、使用场景:

只能上传键值对。

2、使用方式:

请求头设置

Content-Type: application/x-www-form-urlencoded

(不设置请求头Content-Type,默认为此)

请求体格式

key1=value1&key2=value2

参数名和参数值使用“=”拼接,键值对以“&”符号分隔,且键和值都为URL编码(encodeURL()方法)。

注意区分

1、get请求会将参数拼接到url上发送(明文);

2、post请求会将参数放到body中发送(明文)。

3、举例:

① 发送一个get请求,填写参数name、psw,可见最终参数拼到url上发送至服务器。拼接后如下:

http://httpbin.org/get?name=tuxiaomao&psw=123456

实际发送的是经过url编码的,如下:

http%3A%2F%2Fhttpbin.org%2Fget%3Fname%3Dtuxiaomao%26psw%3D123456

② 使用post方法发送请求,填写参数name、psw,参数会放到请求体中单独发送,不拼接到url上。如下图:

2.2 (常用)form-data表单

也可以叫form表单,是一种常用的HTTP请求数据格式,用于在客户端和服务器之间传输包含文件或二进制数据的表单数据。

2.2.1 边界boundary

它的边界(boundary)是一个由一串随机字符组成的字符串,用于分隔不同的表单字段和文件数据。(不需要手动添加,浏览器或接口测试工具会自动生成)

边界字符串在请求头中通过Content-Type字段的boundary参数指定,例如:

Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

边界字符串的作用是将请求数据划分为多个部分,每个部分包含一个表单字段或一个文件数据。在请求体中,每个部分以边界字符串开始,并以两个连续的换行符(\r\n)作为结束标志。每个部分的开头会包含一些额外的信息,如Content-Disposition字段用于指定数据的类型(表单字段或文件)和名称。

multipart/form-data的边界字符串需要保证在请求体中唯一且不会与实际数据冲突,通常使用随机生成的字符串来确保唯一性。边界字符串的长度一般为10个字符以上,以避免与实际数据中可能出现的字符串冲突。

1、使用场景:

可以上传文件,也可以上传键值对。可以二者同时上传,无数量限制。

常用于上传文件或二进制数据的场景,例如用户提交带有文件附件的表单、图片上传等。

2、使用方式:

请求头设置

Content-Type: multipart/form-data

请求体格式

会将请求体以标签为单元,用分隔符boundary分隔开,每部分包含一个不同的表单域(即字段)数据。

每一部分,使用content-type表明文件类型;content-disposition说明字段的一些信息。

3、举例:

① post请求使用form-data表单提交键值对。 

请求头设置如下,

只有1个键值对时,可见首尾的boundary分隔符(是一个字符串),如下,

​有多个键值对时,可见每个键值对首尾的boundary分隔符(是一个字符串),参数之间以一个boundary分隔。如下,

② post请求使用form-data提交键值对和文件

如下图,可见表单数据是2部分,一部分是desc字段,内容是省略号部分;另一部分是上传的图片文件,内容是“[图片二进制数据]”(这里是省略了二进制数据,用描述代替了)。

2.3 (很少用)binary二进制数据

用于传输二进制数据或文件内容,请求体中的数据是原始的字节。

1、使用场景:

只可以上传二进制数据(流或者字节数组),通常用来上传文件,一次只能上传一个文件。(数据被当作一系列字节处理)

(土小帽使用图搜引擎尝试,发现是使用form-data上传图片,足见二进制方式很少用。) 

2、使用方式:

请求头设置

Content-Type: 上传文件的类型

(如 image/jpeg)

请求体格式

文件转为流或字节数组进行传输,Content-Type: multipart/octet-stream会包含在请求体数据中。

3、举例

使用postman上传一张图片到httpbin.org(接口测试网站,会返回发送的请求),如下图。

2.4 (最常用)json字符串

用于发送JSON编码的数据。

json是一种开放标准的文件格式和数据交换格式,它易于人阅读和编写,同时也易于机器解析和生成。现代Web APIs和RESTful服务通常用这种格式。

1、使用场景:

目前大部分接口都是用json传输数据。

2、使用方式:

请求头设置

Content-Type: application/json; charset=UTF-8

(“; charset=UTF-8”可不写)

请求体格式

JSON字符串,如:

 { "key1": "value1", "key2": "value2" }

3、举例:

发送1个post请求到httpbin.org(接口测试网站,会返回发送的请求),如下图。

2.5 纯文本格式:text/plain(见上表)

2.6 html网页格式:text/html(见上表)

text/plain和text/html的区别

写一个简易server,分别设置返回头Content-Type为2种格式,看浏览器对返回字符串的显示方式区别。

(server代码见表格下方)

text/plain

(纯文本格式)

html标签被浏览器识别为纯文本并显示。

text/html

(html网页格式)

html标签被浏览器解析,最终显示标签包围的指定格式的文本“tuxiaomao”。

from http.server import HTTPServer, BaseHTTPRequestHandler  class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):     def do_GET(self):        self.send_response(200)        # self.send_header('Content-Type', 'text/plain')        self.send_header('Content-Type', 'text/html')        self.end_headers()        response = r'<html><head></head><body><div style="color: blue; font-size: 16px;">tuxiaomao</div></body></html>'        self.wfile.write(bytes(response, 'utf-8'))  # 启动sever if __name__ == '__main__':    httpd = HTTPServer(('localhost', 8000), SimpleHTTPRequestHandler)    print("Serving at http://localhost:8000")    httpd.serve_forever()

2.7(极少)xml可扩展标记语言格式

比较老的格式,现在基本不用了。有兴趣可以查看以下文章了解:

《MIME类型中application/xml与text/xml的区别介绍》

https://www.jb51.net/web/804320.html

参考文章:

1、《Multipart/form-data POST文件上传详解》

https://blog.51cto.com/u_15930680/5991162

2、《multipart/form-data的边界是什么?》

https://cloud.tencent.com/developer/information/multipart%2Fform-data%E7%9A%84%E8%BE%B9%E7%95%8C%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F-salon

3、《application/x-www-form-urlencoded与multipart/form-data与application/json的区别 精析》

https://blog.51cto.com/u_15964717/6058599

4、《form表单的enctype属性:规定了form表单数据在发送到服务器时候的编码方式》

https://www.cnblogs.com/yeminglong/p/13152192.html

5、《发送form-data数据时,boundary是浏览器自动设置的吗?》

https://segmentfault.com/q/1010000044886344

6、《Multipart/form-data POST文件上传详解》

https://blog.51cto.com/u_15930680/5991162

7、《请求头Content-Type》

https://www.jianshu.com/p/46fec81809df

8、《【小白学爬虫】text/plain》

https://www.jianshu.com/p/7caacd0800f4

9、《HTTP请求格式详解》

https://www.bilibili.com/read/cv33757460/?jump_opus=1

10、《HTTP协议(请求和响应)》

https://www.kancloud.cn/stone8034/java/1675120

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GA/T1400视图库平台Easy1400软件平台的功能介绍及其应用场景介绍

GA/T 1400标准是中国公安部制定的一系列技术规范&#xff0c;主要针对公安视频图像信息应用系统。这一标准分为多个部分&#xff0c;涵盖了通用技术要求、应用平台技术要求、数据库技术要求等。GA/T 1400视图库标准是为了统一和规范公安系统内视频监控资源的管理和应用&#xf…

Java元组Tuple的使用

WHY&#xff1f; 通常情况下&#xff0c;一个方法返回值是一个&#xff0c;类型固定&#xff08;当然你要封装成对象就另一说了&#xff09;。如果想要在一个方法中返回多个类型不同的值&#xff08;不要封装成对象&#xff09;&#xff1f;这个时候就可以使用元组。典型的需求…

初识IDEA

一、IDEA简介 IDEA 全称 IntelliJ IDEA&#xff0c;是 JAVA编程语言开发的集成环境。IntelliJ 在业界被公认为最好的 java开发⼯具 之⼀&#xff0c;尤其在智能代码助⼿、代码⾃动提示、重构、J2EE⽀持、Ant、JUnit、CVS整合、代码审 查⽅⾯。 JetBrains官⽹ : JetBrains: Esse…

计算机网络TCP/UDP知识点

这是一些在学习过程中关于计算机网络八股文的一些知识点记录&#xff1a; TCP/UDP TCP怎么保证可靠性 1.序列号&#xff0c;确认应答&#xff0c;超时重传 数据到达接收方&#xff0c;接收方需要发出一个确认应答&#xff0c;表示已经收到该数据段&#xff0c;并且确认序号…

有哪些核定生产能力的方法?详解标准工时的测定方法与核定方法!

在当今制造业的快速发展中&#xff0c;生产能力管理已成为企业核心竞争力的关键。它不仅关系到企业如何高效地满足市场需求&#xff0c;更直接影响到生产成本的控制和市场响应速度。准确核定生产能力&#xff0c;是实现生产计划与企业资源优化配置的桥梁。本文将深入探讨核定生…

KCP源码解析系列(一)KCP协议介绍

一、什么是KCP TCP是为流量设计的&#xff08;每秒内可以传输多少KB的数据&#xff09;&#xff0c;讲究的是充分利用带宽。而 KCP是为流速设计的&#xff08;单个数据包从一端发送到一端需要多少时间&#xff09;&#xff0c;以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的…

Linux环境安装Docker Engine并打包部署Java项目

文章目录 1、卸载老版本2、配置docker仓库3、安装最新版docker4、启动docker启动重启开机启动停止查看状态&#xff1a;已经启动查看状态&#xff1a;没有启动 5、查看版本6、运行hello world测试7、配置镜像8、使用docker安装一个应用9、其他命令查看运行的docker应用查看容器…

【网络ping】无法ping通电脑 服务器失败是什么原因

【网络ping】无法ping通电脑 服务器失败是什么原因 转载&#xff1a; https://www.lsjlt.com/ask/show/show.php?id80772631782 点击此处 查看博文《无法ping通的原因》 一、无法ping 通的原因 网络连接问题&#xff1a;首先需要检查网络连接是否正常。可以尝试通过ping其他…

全国首个数据要素人才标准,亿信华辰携76家单位共同起草

在数字化浪潮汹涌的今天&#xff0c;数据已跃升为社会经济发展的核心引擎。如何精准、高效地评估数据要素领域人才的专业能力&#xff0c;成为了亟待解决的关键议题。亿信华辰积极响应国家战略布局&#xff0c;依托自身在大数据管理与应用领域的深厚底蕴&#xff0c;携手业界76…

阿里推出视频 AI 生成式框架 Tora,通过轨迹生成视频

在科技高速发展的今天&#xff0c;AI 已经开始融入人们的生活&#xff0c;就在不久前阿里集团推出了一款可以生成视频的 AI 框架 Tora&#xff0c;这是一款可以面向轨迹的 DiT 框架&#xff0c;它可以结合文本、视觉以及轨迹生成视频。 Tora 之前有可以生成视频的模型也就是扩…

Docker数据管理和网络管理

文章目录 一、Docker数据管理Docker容器的分层哪些数据需要持久化容器数据持久保存方式数据卷&#xff08;data volume&#xff09;数据卷的使用场景数据卷的特点数据卷使用方法实际例子 二、网络管理Docker安装完成后默认的网络设置创建容器后的网络配置修改默认网络设置容器名…

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算

vue3前端开发-小兔鲜-购物车的列表渲染和删除及统计计算&#xff01;这一次&#xff0c;完成列表的渲染和统计计算的内容&#xff0c;比如&#xff0c;统计购物车内有多少货物的数量&#xff0c;及商品的总价格。 <script setup> import { useCartStore } from /stores/c…

RPA财务机器人是什么,RPA的具体应用场景有哪些?| 实在RPA研究

越来越多的人工智能及超自动化技术在企业财务工作中得以普及应用&#xff0c;以提升财务工作效率&#xff0c;促进财务部门实现全面数字化转型。 RPA财务机器人是什么&#xff1f; RPA&#xff0c;即机器人流程自动化&#xff08;Robotic Process Automation&#xff09;&#…

【方案合集】园区数据治理解决方案(PPT原件)

1、园区大数据治理综述 2、园区大数据治理总体架构 3、园区大数据治理演进路线 4、园区大数据治理建设实施 软件全套资料部分文档清单&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xff0c;立项申请审批表&#xff0c;产品需求规格说明书&#xff0c;需求调研计划…

大模型的当前和未来

自2022年年底ChatGPT打响大模型热潮第一枪&#xff0c;至今已有一年半多的时间&#xff0c;大模型持续受到业界高度关注。大模型当前发展情况如何&#xff0c;未来又将如何演进发展&#xff1f; 大模型入门 1.什么是大模型、超大模型和Foundation Model&#xff1f; 大模型**…

『 Linux 』网络基础(二)

文章目录 数据在不同层之间的名称数据的跨网络传输端口号TCP协议与UDP协议网络字节序套接字编程的种类 数据在不同层之间的名称 以TCP/IP模型为例,数据在不同层之间有不同名称; 应用层(Applicant Layer) 数据名称一般为 消息(Message),请求/响应(Request/Response); 在这一层…

图像处理中的一些知识点详解

目录 Sobel算子的详细由来以及scharr算子laplace算子的由来 Sobel算子的详细由来以及scharr算子 具体解释可以参考&#xff1a;这篇知乎的前两个回答&#xff0c;尤其第二个回答。 补充&#xff1a;这里的梯度计算使用的是前向差分和后向差分相结合的中心差分思想&#xff08;…

看看月薪3W的电商运营,怎么做数据分析!

作为电商运营的你&#xff0c;得学会分析数据才是真正学会运营。其实不是数据分析太难&#xff0c;而是你没有找对方法&#xff01; 首先&#xff0c;从分析框架方面来看&#xff0c;可以分为【店铺整体、爆款单品、竞品店铺、推广数据、行业大盘】5个维度。从这些维度考虑&am…

【Linux系列】sshpass使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Qt自定义TreeWidget,实现展开折叠按钮在右侧,且一条竖直线上对齐

效果如下&#xff1a; 图片随便找的&#xff0c;可能需要调下样式&#xff0c;代码复制可用&#xff0c;留给有需要的人。 #ifndef CustomTreeWidget_h__ #define CustomTreeWidget_h__#include <QTreeWidget> #include <QPushButton>class CCustomTreeWidget : p…