惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
S
SegmentFault 最新的问题
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
量子位
P
Proofpoint News Feed
博客园 - 【当耐特】
MongoDB | Blog
MongoDB | Blog
L
LangChain Blog
F
Fortinet All Blogs
C
Check Point Blog
博客园_首页
I
InfoQ
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
美团技术团队
Vercel News
Vercel News
Apple Machine Learning Research
Apple Machine Learning Research

晚花行乐

马克卡尼在2026年达沃斯论坛上的讲话(阅读材料) | 晚花行乐 鸡娃如何用力才是恰到好处 | 晚花行乐 读万卷书,行万里路的辩证关系 | 晚花行乐 反对培训机构掐尖招生 | 晚花行乐 小泽和建国会谈最后10分钟全文(阅读材料) | 晚花行乐 来看看 DeepSeek 怎么鸡娃 | 晚花行乐 谈谈基本功 | 晚花行乐 惠普 ProDesk SFF PC 各系列参数对比 | 晚花行乐 解决瘦客户机上安装 Debian 12 启动失败问题 | 晚花行乐 意拾喻言:老外写的文言文 | 晚花行乐 笠翁对韵中的典故(十三元) | 晚花行乐 谈谈中考取消四小门 | 晚花行乐 亚马逊云科技产品免费试用攻略(3) - 对象存储服务 | 晚花行乐 在 Windows 10 LTSC 版本上安装 WSL2 | 晚花行乐 Debian 12 的常用配置项 | 晚花行乐 在 Debian 12 上安装 Nvidia 显卡驱动程序 | 晚花行乐 解决 Debian 12 关机失败问题 | 晚花行乐 解决 VS Code 自动更新版本后卡在连接界面 | 晚花行乐 观看巴黎奥运会有感 | 晚花行乐 在 Windows10 上安装惠普旧打印机驱动程序 | 晚花行乐 欢迎关注公众号:晚花行乐 | 晚花行乐 如何编写拼写检查器 | 晚花行乐 亚马逊云科技产品免费试用攻略(2) - 云服务器 | 晚花行乐 Pandas 中 axis 参数的理解(附实例) | 晚花行乐 我打算命个名,叫什么什么 Manager | 晚花行乐 上海武康路历史建筑一览 | 晚花行乐 Python 实现简单的数学表达式解析并处理 | 晚花行乐 观看马拉松的感悟 | 晚花行乐 Python 保存 Cookies 到文件并再次读取 | 晚花行乐 如何为 Hugo 静态网站添加评论功能 | 晚花行乐
Jmeter 上传文件的两种方法 | 晚花行乐
2018-12-05 · via 晚花行乐

本文介绍如何用 Jmeter 模拟浏览器表单上传文件。首先介绍上传的原理,随后介绍两种方法。

表单提交数据

从浏览器端向服务器端提交数据,比如用户名、密码、上传文件等,是通过表单来完成的。比如下面的 HTML:

<form action="/some/upload/path" method="post">
   用户名? <input type="text" name="user-name"><br>
   密码? <input type="password" name="user-name"><br>
上传文件? <input type="file" name="files"><br>
   <input type="submit" value="Send"> <input type="reset">
 </form>

在浏览器的页面中将展示出如下的控件:

用户填写内容,点击 Send 按钮后,填写的信息将作为表单信息整体以 POST 方法提交到 /some/upload/path 路径中。 POST 请求的内容(也就是 body)则由浏览器自动编码生成,编码方式有如下两种:

编码方式

表单中的数据将以特殊的方式编码后,通过 http 协议上传。有两种编码方式:

  • application/x-www-form-urlencoded
  • multipart/form-data

application/x-www-form-urlencoded 方法仅能传送少量的数据,比如用户名、密码之类。当上传文件时,尤其是二进制文件(图片、声音、压缩包)时,只能使用第二种:multipart/form-data 编码方法。这种方法有如下优点:

  • 一次请求的请求体可以包含多个部分
  • 每部分的内容是各自独立的,所有信息都包含在内部
  • 请求体各部分之间以分隔边界(Boundary)相隔
  • Boundary 规定在请求头的 Content-Type 里
  • Boundary 可以是任意字符串,为了避免和真实数据混淆,内容应该足够长、足够随机
  • 两端的 Boundary 需要再加两个横杠字符,以示开始和终结

表单的编码方式,由 HTML 标签的 enctype 属性指定:

<FORM action="/some/upload/path" enctype="multipart/form-data" method="post">
   <P>
   What is your name? <INPUT type="text" name="submit-name"><BR>
   What files are you sending? <INPUT type="file" name="files"><BR>
   <INPUT type="submit" value="Send"> <INPUT type="reset">
 </FORM>

一次完整的上传请求,可以是这样的:

(注意在Content-Type 中规定了分隔字串arandomstring,才能在 body 中使用这个字串)

POST /some/upload/path HTTP/1.1
Content-Type: multipart/form-data; boundary=arandomstring

--arandomstring
(Part1)
arandomstring
(Part2)
arandomstring
(Part3)
arandomstring--

上面的 (Part1,2,3) 是需要传送的文件内容,注意第一个和最后一个分隔符前后各有两个横杠(-)作为分界标记。

方法一:利用控件上传

HTTP Request 自带文件上传控件,可以用来上传文件

其中 FilePath 一栏填写文件路径和文件名,如果没有路径,JMeter 会从其启动路径中寻找该文件。 Parameter Name 一栏填写 表单中 name 的值,详见 表单提交数据 一节中,这个值是 files 。MIME Type 则填写文件类型

方法二:自行组合请求

按照 本文 编码方式 一节中介绍的,只要将 Bounary 字符串规定在请求 Header 中,再在请求 Body 中用同样的 Boundary 字符做分隔,同样能实现上传的动作。

这种方法的优点是:可以自定义请求Header,增加自定义的字段。缺点是:只能上传文本文件,对于 zip 之类的二进制文件,Jmeter 的 String 类型会做进一步的编码,使得二进制文件在放入 Body 之前被修改。

各位读后有什么想法,请在下方留言吧!如果对本文有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

精彩评论