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

课程大纲

一、定义

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.rhkb.cn/news/396562.html

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

相关文章

【C++】面向对象三大特性之—— 继承 | 详解

目录 继承的概念 继承语法格式 继承方式 隐藏 继承下来的成员和父类是不是同一份 隐藏 基类和派生类对象赋值转换 继承中的作用域 派生类的默认成员函数 构造 拷贝构造 赋值重载 析构 继承与友元 继承与静态成员 菱形继承及菱形虚拟继承 多继承 菱形继承 菱形…

探索Linux -- 冯诺依曼体系、初始操作系统、初始进程、fork函数

一、冯诺依曼体系结构 1、概念 冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储器结构。 最早的计算机器仅内含固定用途的程序。若想要改变此机器的程序&#xff0c;就必须更改线路、更改结构甚至重新设计此机器。当然最早的计…

三防平板满足多样化定制为工业领域打造硬件解决方案

在当今工业领域&#xff0c;数字化、智能化的发展趋势日益显著&#xff0c;对于高效、可靠且适应各种复杂环境的硬件设备需求不断增长。三防平板作为一种具有坚固耐用、防水防尘防摔特性的工业级设备&#xff0c;正以其出色的性能和多样化的定制能力&#xff0c;为不同行业的应…

8.7 Day15 匿名用户访问FTP与日志查看

查看配置文件 vsftpd是一个认证文件&#xff0c;意味着ftp是通过vsftpd这个认证文件来对我们输入的用户名和密码进行认证的&#xff0c;那么这个认证文件在哪里呢&#xff1f; 所在位置如下&#xff1a; 查看文件配置内容 默认通过系统来验证&#xff0c;但现在我们欲做一个类…

Flink-DataWorks第二部分:数据集成(第58天)

系列文章目录 数据集成 2.1 概述 2.1.1 离线&#xff08;批量&#xff09;同步简介 2.1.2 实时同步简介 2.1.3 全增量同步任务简介 2.2 支持的数据源及同步方案 2.3 创建和管理数据源 文章目录 系列文章目录前言2. 数据集成2.1 概述2.1.1 离线&#xff08;批量&#xff09;同步…

VulnHub靶场-VulnOS:2

1.环境准备 下载地址&#xff1a;VulnOS: 2 ~ VulnHub 前言&#xff1a;由于我们下载的靶场是vdi文件&#xff0c;而我使用的是虚拟机&#xff0c;我们需要安装VirtualBox将vdi文件转换成虚拟机的vmdk文件vdi转vmdk VirtualBox与VMware硬盘格式转换及使用方法-CSDN博客 虚拟…

【中等】 猿人学web第一届 第2题 js混淆 动态cookie 1

目录 调试干扰Hook Function 加密参数定位hook Cookie AST 解混淆字符串解密还原解密函数AST 配合解密函数还原字符串 ASCII 编码字符串还原字符串相加花指令(对象)剔除无用代码虚假 if剔除无引用代码剔除无引用的对象数值还原 switch 还原完整的 AST 代码代码注意 还原加密 请…

pygame小游戏

代码存在一些bug&#xff0c;感兴趣可自行修改&#xff0c;游戏运行后玩法与吃金币游戏类似。&#xff08;代码及结果比较粗糙&#xff0c;仅供参考&#xff09; 注&#xff1a;&#xff08;图片、音乐、音效文件老是上传上传不上&#xff0c;想要可私&#xff0c;也可以自己找…

如何在银河麒麟操作系统上搭建 Electron (含 Electron 打包指南)

本次教程所用版本 Eletron版本&#xff1a;31.3.1 Electron-packager版本&#xff1a;17.1.2 VScode版本&#xff1a;1.92.0 Node版本&#xff1a;18.19.0 npm版本&#xff1a;10.2.3 前言&#xff1a; 随着跨平台应用开发的需求日益增长&#xff0c;Electron 和 Qt 成为…

Midjourney入门-提示词基础撰写与公式

​ 前言 在前几篇教程里我们已经可以初步使用Midjourney进行出图了。 包括也了解了Midjourney的指令与参数。 但如果你想用Midjourney去生成各种各样高质量的图片&#xff0c; 并且生成的图片是你想要的画面内容&#xff0c;也就是更好控制生成图片的画面内容与风格&#xf…

书生大模型实战营闯关记录----第八关:书生大模型全链路开源开放体系

书生大模型全链路开源开放体系 一、概述 书生大模型&#xff0c;即InternLM系列模型&#xff0c;是由上海人工智能实验室书生团队开发的一系列大语言模型。这些模型以其强大的功能而著称&#xff0c;涵盖了从基础的语言理解到复杂的数学解题和图文创作等多个领域。 发展历程…

【每日面经】快手面经

ConcurrentHashMap和HashMap的区别&#xff1f;使用场景&#xff1f; 线程安全性 concurrentHashMap是线程安全的&#xff0c;HashMap不是线程安全的锁机制 ConcurrentHashMap采用的是分段锁&#xff08;Sagment&#xff09;机制&#xff0c;降低所得粒度提高了并发性能 Curr…

4章4节:临床数据科学中如何用R来进行缺失值的处理

在临床科研中,由于失访、无应答或记录不清等各种原因,经常会遇到数据缺失的问题。本文将深入探讨医学科研中数据缺失的成因、分类、影响以及应对方法,结合R语言的实际应用,为医学研究人员提供全面的解决方案。 一、认识缺失数据 其实,很多医学的纵向研究因获取数据资料时…

38.【C语言】指针(重难点)(C)

目录: 8.const 修饰指针 *修饰普通变量 *修饰指针变量 9.指针运算 *指针或-整数 *指针-指针 *指针关系运算 往期推荐 承接上篇37.【C语言】指针&#xff08;重难点&#xff09;&#xff08;B&#xff09; 8.const 修饰指针 const 全称 constant adj.不变的 *修饰普通变量 #…

java.lang.NoClassDefFoundError: ch/qos/logback/core/util/StatusPrinter2

1、问题 SpringBoot升级报错&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/core/util/StatusPrinter2 类找不到&#xff1a; Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.util.StatusPrinter22、…

HDFS写入数据的流程图

1.客户端向namenode发送请求&#xff0c;请示写入数据 2.namenode接受请求后&#xff0c;判断这个用户是否有写入权限&#xff0c;如果不具备直接报错&#xff1b;如果有写入权限&#xff0c;接着判断在要写入的目录下是否已经存在这个文件&#xff0c;如果存在&#xff0c;直…

PHP语言特性漏洞汇总【万字详解】

文章目录 任意文件下载PHP弱类型比较字符比较绕过代码示例过程 SHA1比较绕过MD5比较绕过SESSION比较绕过STRCMP比较绕过科学计算法绕过概念复现复现2 json_decode&#xff08;&#xff09;绕过概念源码分析 ereg绕过概念复现复现2 array_search强相等绕过概念复现 文件包含生成…

螺旋矩阵 | LeetCode-59 | LeetCode-54 | 分类讨论

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 &#x1f383;分类不好&#xff0c;这道题就做不出来&#xff01;&#x1f388; &#x1f4cc;LeetCode链接&#xff1a;59. 螺旋矩阵 II &#x1f4cc;LeetCode链接…

Mac平台M1PRO芯片MiniCPM-V-2.6网页部署跑通

Mac平台M1PRO芯片MiniCPM-V-2.6网页部署跑通 契机 ⚙ 2.6的小钢炮可以输入视频了&#xff0c;我必须拉到本地跑跑。主要解决2.6版本默认绑定flash_atten问题&#xff0c;pip install flash_attn也无法安装&#xff0c;因为强制依赖cuda。主要解决的就是这个问题&#xff0c;还…

移动端上拉分页加载更多(h5,小程序)

1.h5,使用原生方式监听页面滚动上拉分页加载更多 <template><div></div> </template><script> export default {data() {return {loadflag: true,maxpages: 0, //最大页码currentpage: 0, //当前页listData: [],config: {page: 1,pageSize: 15,…