You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Apache Bench(ab)测试上传图片的POST接口?

如何用Apache Bench(ab)测试图片上传的POST请求

你之前踩的坑很典型:curl -F发送的是multipart/form-data格式的请求,而你用Postman Echo返回的JSON是响应内容,并非原始的请求体格式,所以用ab发送这个JSON自然会触发服务器错误。下面是正确的操作步骤:

步骤1:捕获curl发送的原始请求体

首先,我们需要拿到curl -F实际发送的请求体内容(包含正确的multipart边界和图片二进制数据)。可以用curl的--trace-ascii参数把请求细节输出到文件:

curl -X POST -F "image=@ta1.jpeg" -F "image=@ta2.jpeg" http://domain.tld/upload --trace-ascii request_trace.txt --output /dev/null

打开生成的request_trace.txt,找到类似下面的请求体部分(从--开头的boundary开始,到最后的--结束):

--------------------------abc123def456
Content-Disposition: form-data; name="image"; filename="ta1.jpeg"
Content-Type: image/jpeg

[二进制图片内容]
--------------------------abc123def456
Content-Disposition: form-data; name="image"; filename="ta2.jpeg"
Content-Type: image/jpeg

[二进制图片内容]
--------------------------abc123def456--

把这部分内容完整复制出来,保存为一个二进制文件(比如post_body.bin),注意不要用文本编辑器修改二进制内容,避免损坏数据。

步骤2:提取正确的Content-Type头

同样在request_trace.txt里,找到请求头中的Content-Type字段,它会包含自动生成的boundary,格式如下:

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

把这个完整的Content-Type值记下来,后面ab命令会用到。

步骤3:用ab发起并发测试

现在用ab的-p参数指定请求体文件,-T参数指定正确的Content-Type,再加上并发数(-c)和总请求数(-n):

ab -n 100 -c 10 -p post_body.bin -T "multipart/form-data; boundary=------------------------abc123def456" http://domain.tld/upload

关键注意事项

  • boundary必须完全一致:-T参数里的boundary要和请求体文件中的boundary完全匹配,包括前面的所有横线。
  • 二进制文件完整性:请求体文件要保存为二进制格式,不要用纯文本编辑器编辑,否则图片的二进制数据会被破坏。
  • 请求体复用:如果你的测试需要每次上传相同的图片,这个请求体文件可以重复使用;如果需要不同图片,就得重新捕获对应的请求体。

内容的提问来源于stack exchange,提问作者user1981275

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:41:33