接口基础知识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
相关文章:

接口基础知识6:详解http request body(一篇讲完常见请求体)
课程大纲 一、定义 HTTP请求体(HTTP Request body):HTTP请求消息的可选部分,仅在请求方法支持且需要发送数据时使用。 POST方法、PUT方法有请求体,GET和HEAD方法没有请求体。 请求头和请求体之间会有一个空行&#…...

Windows Server 安装Web,DHCP,DNS,FTP四大服务及其配置和监控方式
以Windows Server 2022为例 1.安装Web服务 添加角色->Web服务器勾选 添加Web服务器后会有一个interpub文件夹,其中wwwroot为网站根目录 工具->IIS->网站 ,这里可以将风险服务停掉 2.安装DHCP服务 添加角色->DHCP服务器勾选 右击IPv4->新建作用域 …...

创意指南丨VR游览沉浸式空间体验
欢迎来到我们制作的VR幻想世界。玩家的起点是一条蓝色水晶大道,让我们一起探索这个如梦似幻的境地。 在这条大道的两侧,漂浮着半透明的大水晶水母。它们轻盈地在空中飘动,仿佛在欢迎我们的到来。这条道路上方,一个个半圆环不停地…...

【iOS】—— autoreleasePool以及总结
【iOS】—— autoreleasePool以及总结 1. 什么是autoreleasePool2. autoreleasePoolPageobjc_autoreleasePoolPush方法:objc_autoreleasePoolPop方法:tokenkill()方法 3. 总结3.1 autoreleasePool的原理3.2 autoreleasePool的问题3.2.1 autoreleasepool的…...

培训第二十五天(python中执行mysql操作并将python脚本共享)
mysql下载路径: MySQL :: MySQL Community Downloads [root2 ~]# vim py001.pya3b4print(ab)print(a**2b**2)[root2 ~]# python py001.py 725[root2 ~]# python3>>> import random>>> random<module random from /usr/lib64/python3.6/random…...

LVS实战项目
LVS简介 LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVSkeepalived实现。 LVS集群的类型 lvs-nat : 修改请求报文的目标IP, 多目标 IP 的 DNAT lvs-dr ÿ…...

笔记小结:《利用python进行数据分析》之层次化索引
层次化索引 导入样例 层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。抽象点说,它使你能以低维度形式处理高维度数据。我们先来看一个简单的例…...

Linux的线程篇章 - 线程池、进程池等知识】
Linux学习笔记---018 Linux之线程池、进程池知识储备1、线程池1.1、池化技术1.1.1、定义与原理1.1.2、优点1.1.3、应用场景 1.2、线程池的特点与优势1.3、线程池的适用场景1.4、线程池的实现 2、进程池2.1、定义和基本概念2.2、进程池的特点与优势2.3、进程池的适用场景&#x…...

汇昌联信做拼多多运营正规吗?
汇昌联信在拼多多平台上的运营是否正规,是许多商家和消费者都关心的问题。随着电商行业的快速发展,平台运营的正规性直接关系到消费者的购物体验和商家的信誉。 一、公司背景与资质审核 明确回答问题:汇昌联信作为一家专业的电商运营公司&…...

240810-Gradio自定义Button按钮+事件函数+按钮图标样式设定
A. 最终效果 B. 参考代码 要通过自定义HTML按钮来触发Gradio自带按钮的 click 函数,你可以使用JavaScript来模拟点击Gradio的按钮。这里是一个示例代码,展示了如何实现这一点: import gradio as gr# 自定义的 JavaScript,用于捕…...

排序算法--快速排序
一、三色旗问题 问题描述 有一个数组是只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是计数进行排序: 解题思路 1.定义两个变量,i和j(下标),从index0开始遍历 2.如…...

springMVC -- 学习笔记
前言简介演示 ⇒ (最简单的原理,开发并不这样,理解一下就好)演示 ⇒ 接近真实注解开发(好好理解一下)重要的源码献上 Controller 讲解RequestMapper ⇒ 没啥记的,第一个案例看看就行了RestFul 风…...

修复本地终端(windows)连接服务器使用zsh出现乱跳的问题
目前市面上还没有发现解决方案,记录一下! 1.起因: 在服务器配置了zsh后,用本地的windows去连接的时候,终端内容会出现乱跳,比如输入了一个“l”,后面出现多个“lll”,如下: ⚡ roo…...

【扒代码】regression_head.py
import torch from torch import nnclass UpsamplingLayer(nn.Module):# 初始化 UpsamplingLayer 类def __init__(self, in_channels, out_channels, leakyTrue):super(UpsamplingLayer, self).__init__() # 调用基类的初始化方法# 初始化一个序列模型,包含卷积层、…...

vue2 使用axios 请求后台返回文件流导出为excel
目录 步骤 1: 安装 Axios 步骤 2: 创建 Axios 实例 步骤 3: 发起请求并处理文件流 说明 步骤 1: 安装 Axios 首先,确保项目中已经安装了 Axios。如果没有,可以通过以下命令进行安装: npm install axios 步骤 2: 创建 Axios 实例 为了更…...

MATLAB数据可视化:在地图上画京沪线的城市连线
matlab自带的geoplot(lat,lon) 可以在地理坐标中绘制线条。使用 lat和lon分别指定以度为单位的经度和纬度坐标。 绘制京沪线所经城市线条: citys [116.350009,39.853928; 116.683546,39.538304; 117.201509,39.085318; 116.838715,38.304676;...116.359244,37.436…...

【AI】CV基础1
定期更新,建议关注更新收藏。 本站友情链接: OCR篇1 可变形卷积Deformable Conv opencv-python形态学操作合集 目录 仿射变换图像二阶导数本质探讨PIL通道、模式、尺寸、坐标系统、调色板、信息滤波器实现图像格式转换 OpenCV轮廓提取 仿射变换 仿射变换…...

数据结构《栈》
数据结构《栈》 1、栈的概念及结构2、栈的实现3、练习: 1、栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO&…...

说一说mysql的having?和where有什么区别?
在 MySQL 中,HAVING 子句和 WHERE 子句都是用于过滤查询结果的,但它们之间有一些重要的区别。下面我将详细介绍这两个子句的区别以及它们的使用场景。 1. HAVING 子句 作用: HAVING 子句用于过滤聚合后的结果集。它通常与 GROUP BY 子句一起使用&#x…...

LeetCode45. 跳跃游戏 II
题目链接: 45. 跳跃游戏 II - 力扣(LeetCode) 思路分析:这属于上一题的变种,思路有所不同,要用到贪心的思想。从第一步开始,在可以跳跃的范围内,选择能够到达最远位置的点将其作为…...

算法打卡 Day19(二叉树)-平衡二叉树 + 二叉树的所有路径 + 左叶子之和 + 完全二叉树的节点个数
Leetcode 101-平衡二叉树 文章目录 Leetcode 101-平衡二叉树题目描述解题思路 Leetcode 257-二叉树的所有路径题目描述解题思路 Leetcode 404-左叶子之和题目描述解题思路 Leetcode 222-完全二叉树的节点个数题目描述解题思路 题目描述 https://leetcode.cn/problems/balanced…...

国际以太网专线 (IEPL)/国际专线(IPLC)-全球覆盖,无界沟通
中国联通国际公司产品:国际以太网专线 (IEPL)/国际专线(IPLC)—— 跨境数据传输的坚实桥梁 在全球化日益加深的今天,跨境、跨地域的数据传输需求激增,企业对数据传输的速度、安全性和稳定性提出了前所未有的高要求。中…...

信息安全管理知识体系攻略(至简)
信息安全管理知识体系主要包括信息安全管理体系、信息安全策略、信息安全系统、信息安全技术体系等。 一、信息安全管理 1、信息安全管理体系(ISMS)。ISO27001是国际标准化组织(ISO)和国际电工委员会(ICE)…...

HCIE学习笔记:IPV6 地址、ICMP V6、NDP 、DAD (更新补充中)
系列文章目录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、IPV4、IPv6包头对比1. IPV4包头2.IPv6包头3.IPV6扩展包头 二、IPV6基础知识地址结构、地址分类三、ICMPV4、ICMPV61、 lnternet控…...

人工智能】Transformers之Pipeline(九):物体检测(object-detection)
目录 一、引言 二、物体检测(object-detection) 2.1 概述 2.2 技术原理 2.3 应用场景 2.4 pipeline参数 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipel…...

[SWPUCTF 2021 新生赛]easy_md5
分析代码:1.包含flag2.php 2.GET传name,POST传password $name ! $password && md5($name) md5($password) 属于MD5绕过中的php 弱类型绕过 解题方法: 方法一 import requests# 网站的URL url "http://node7.anna.nssctf.cn:28026&q…...

Redis面试题大全
文章目录 Redis有哪几种基本类型Redis为什么快?为什么Redis6.0后改用多线程?什么是热key吗?热key问题怎么解决?什么是热Key?解决热Key问题的方法 什么是缓存击穿、缓存穿透、缓存雪崩?缓存击穿缓存穿透缓存雪崩 Redis…...

【langchain学习】BM25Retriever和FaissRetriever组合 实现EnsembleRetriever混合检索器的实践
展示如何使用 LangChain 的 EnsembleRetriever 组合 BM25 和 FAISS 两种检索方法,从而在检索过程中结合关键词匹配和语义相似性搜索的优势。通过这种组合,我们能够在查询时获得更全面的结果。 1. 导入必要的库和模块 首先,我们需要导入所需…...

【C语言】预处理详解(上)
文章目录 前言1. 预定义符号2. #define 定义常量3. #define定义宏4. 带有副作用的宏参数5. 宏替换的规则 前言 在讲解编译和链接的知识点中,我提到过翻译环境中主要由编译和链接两大部分所组成。 其中,编译又包括了预处理、编译和汇编。当时,…...

uni-app内置组件(基本内容,表单组件)()二
文章目录 一、 基础内容1.icon 图标2.text3.rich-text4.progress 二、表单组件1.button2.checkbox-group和checkbox3.editor 组件4.form5.input6.label7.picker8.picker-view 和 picker-view-column9.radio-group 和 radio10.slider11.switch12.textarea 一、 基础内容 1.icon…...