HTTP 请求时传递多部分表单数据

news/2025/3/4 21:57:35/
http://www.w3.org/2000/svg" style="display: none;">

HTTP 请求时传递多部分表单数据(multipart/form-data)

--data-raw $'------demo11111\r\nContent-Disposition: form-data; name="Filedata"; filename="截屏2025-02-27 15.45.46.png"\r\nContent-Type: image/png\r\n\r\n\r\n------demo11111\r\nContent-Disposition: form-data; name="type"\r\n\r\n5\r\n------demo11111--\r\n' 

--data-raw选项用于直接传递原始数据,而多部分表单数据格式通常用于上传文件或提交包含多种类型数据的表单

特殊符号解释

$
在 Bash 等 shell 中,$'...' 是一种 ANSI C 引号字符串的语法。这种语法允许在字符串中使用 C 风格的转义序列,比如 \r(回车符)、\n(换行符)、\t(制表符)等。例如,$'\r\n' 会被解释为回车换行符,这在多部分表单数据中是必要的,因为它遵循严格的换行格式要求。
\r\n
\r\n 是回车换行符,在 HTTP 协议和多部分表单数据中,它用于分隔不同的部分和字段。回车换行符是多部分表单数据格式的重要组成部分,用于明确每个字段和数据块的边界。

多部分表单数据结构分析

多部分表单数据由多个部分组成,每个部分之间用分隔符(这里是 ------demo11111)分隔,每个部分包含以下内容:
分隔符:用于区分不同的表单字段或文件
内容描述头:包含字段名、文件名、内容类型等信息
空行:由 \r\n 表示,用于分隔内容描述头和实际数据

数据内容:实际要上传的数据。

示例拆解

------demo11111
Content-Disposition: form-data; name="Filedata"; filename="截屏2025-02-27 15.45.46.png"
Content-Type: image/png<文件内容>
------demo11111
Content-Disposition: form-data; name="type"5
------demo11111--

第一部分:上传一个名为 截屏2025-02-27 15.45.46.png 的 PNG 图片,字段名为 Filedata
第二部分:上传一个名为 type 的字段,值为 5
结束标记:最后以 ------demo11111-- 表示表单数据结束

示例

假设要向 http://example.com/upload 发送上述多部分表单数据,完整的 curl 命令可能如下:

curl -X POST \--data-raw $'------demo11111\r\nContent-Disposition: form-data; name="Filedata"; filename="截屏2025-02-27 15.45.46.png"\r\nContent-Type: image/png\r\n\r\n<文件内容>\r\n------demo11111\r\nContent-Disposition: form-data; name="type"\r\n\r\n5\r\n------demo11111--\r\n' \http://example.com/upload

这样,curl 就会将多部分表单数据发送到指定的服务器地址

demo11111 是通用的吗?

并不是通用的

在使用多部分表单数据(multipart/form-data)进行文件上传或表单提交时,需要一个边界字符串(boundary string)来分隔不同的表单字段或文件数据。这个边界字符串是随机生成的,目的是确保它不会在表单数据中意外出现,从而避免混淆不同的部分。
不同的客户端(如浏览器、curl 等工具)在发起请求时,都会生成自己唯一的边界字符串。例如,在 Chrome 浏览器中,当使用 HTML 表单上传文件时,浏览器会自动生成一个边界字符串;使用 curl 时,如果手动指定多部分表单数据,也需要提供一个边界字符串,或者让 curl 自动生成。

非通用性原因

唯一性要求:为了准确区分多部分表单数据中的各个部分,边界字符串必须是唯一的。如果使用通用的边界字符串,那么在数据中就有可能意外出现与边界字符串相同的内容,导致服务器无法正确解析表单数据。

随机生成机制:不同的请求在不同的时间、不同的客户端发起,每次都会生成不同的边界字符串。例如,你在两次不同的 curl 请求中,生成的边界字符串大概率是不一样的。

bash
curl -X POST \--data-raw $'------WebKitFormBoundaryabc123\r\nContent-Disposition: form-data; name="Filedata"; filename="test.png"\r\nContent-Type: image/png\r\n\r\n<文件内容>\r\n------WebKitFormBoundaryabc123--\r\n' \http://example.com/upload

示例 2

curl -X POST \--data-raw $'------WebKitFormBoundaryxyz789\r\nContent-Disposition: form-data; name="Filedata"; filename="test2.png"\r\nContent-Type: image/png\r\n\r\n<文件内容>\r\n------WebKitFormBoundaryxyz789--\r\n' \http://example.com/upload

http://www.ppmy.cn/news/1576138.html

相关文章

【STM32(HAL库) RTC】(实时时钟)配置

1. RTC简介 RTC&#xff08;Real-Time Clock&#xff09; 是STM32内部的一个独立定时器&#xff0c;用于提供精确的日历和时间信息&#xff0c;即使在主电源关闭时&#xff08;通过备用电池供电&#xff09;仍可继续运行。其主要特性包括&#xff1a; 支持年月日、时分秒的计时…

6.指针学习

指针 指针指针类型野指针指针运算指针- 整数指针-指针指针的关系运算 指针和数组二级指针指针数组 指针 指针 内存编号 地址口语指针&#xff1a;指针变量&#xff0c;是用来存放内存地址的变量 指针变量&#xff1a;存放地址的变量。 &取出变量的内存真实地址把地址存…

SQL笔记#SQL高级处理

一、窗口函数 1、什么是窗口函数 窗口函数也称为OLAP函数。OLAP的意思是对数据库数据进行实时分析处理。 2、窗口函数的语法 <窗口函数> OVER ( [PARTITION BY <列清单>] ORDER BY <排列用列清单> ) 能…

Unity Shader 学习14:模版测试 与 深度测试

目录 一、模版检测 1. 概念 ① 比较 Comp ② 更新 Pass 2. 示例分析 - 3D卡牌 二、深度检测 1. 概念 ① 比较&#xff1a;深度测试 Z-Test ② 更新&#xff1a;深度写入 Z-Write 2. 示例分析 一、模版检测 核心&#xff1a;当前模版缓冲区中的值 [stencilBufferValu…

机器学习——李航(实验)笔记第一二章

plt.plot(x_points,fit_func(p_lsq[0],x_points),labelfitted curve) result leastsq(residuals_func, initial_params, args(x_data, y_data)) regularization0.00001 #较小的λ值意味着正则化作用较弱&#xff0c;模型可能仍然会过拟合&#xff1b;较大的λ值则可能导致模型…

说说 Spring MVC 的执行流程

Spring MVC 是一个基于 Java 的轻量级、开源的 Web 框架&#xff0c;用于构建 Web 应用程序。它通过将请求处理的各个阶段解耦&#xff0c;使得开发更加灵活和模块化。以下是 Spring MVC 的执行流程&#xff0c;从用户发起请求到返回响应的整个过程&#xff1a; --- ### 1. 用…

《机器学习数学基础》补充资料:矩阵运算技巧和矩阵指数

在《机器学习数学基础》第 2 章的 2.1.3 节、2.1.4 节和 2.1.5 节分别介绍了矩阵的加&#xff08;减&#xff09;法、数量乘法和矩阵乘法&#xff0c;这些构成了矩阵的基本运算&#xff0c;并且列出了矩阵的所有运算性质。在手工计算或者原理证明中&#xff0c;这些计算性质会经…

AI Agent 定义与核心要素详解

AI Agent&#xff08;人工智能代理&#xff09;是一种能够感知环境、自主决策并执行任务以达成目标的软件实体。它结合了感知、推理、学习和行动能力&#xff0c;能够在复杂环境中独立或协作工作。以下是其核心要素&#xff1a; 1. 感知 AI Agent 通过传感器或数据输入感知环…