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

求助:JMeter 5.4如何发送携带PDF附件的SOAP信封(2022年有效方案)

JMeter 5.4 发送带PDF附件的SOAP信封(MTOM格式)可行方案

核心方案:用HTTP请求采样器构造MTOM请求

MTOM是SOAP传输二进制附件的标准方式,JMeter 5.4完全支持,以下是具体步骤:

1. 配置HTTP请求与请求头

  • 新建HTTP请求采样器,设置请求方法为POST,填写目标接口URL
  • 添加请求头管理器,配置以下关键头:
    • Content-Type: multipart/related; boundary="A100x"; type="application/xop+xml"; start="<soap-part>"; start-info="text/xml"
    • SOAPAction: 填写接口要求的SOAP Action值(若接口需要)

2. 编写MTOM格式请求体

在HTTP请求的Body Data中填入以下模板,替换占位符为实际内容:

--A100x
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: 8bit
Content-ID: <soap-part>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" [你的命名空间]>
  <!-- 填写完整的SOAP信封内容 -->
  <inc:Include href="cid:PDF_TO_UPLOAD" xmlns:inc="http://www.w3.org/2004/08/xop/include"/>
</soapenv:Envelope>
--A100x
Content-Type: application/pdf
Content-ID: <PDF_TO_UPLOAD>
Content-Transfer-Encoding: binary
Content-Disposition: attachment; filename="MyDoc.pdf"

${PDF_BINARY_CONTENT}
--A100x--

3. 加载PDF二进制内容到变量

给HTTP请求添加JSR223 PreProcessor(选择Groovy语言),执行以下代码读取PDF:

def pdfPath = "/绝对路径/到/你的/MyDoc.pdf"
def pdfBytes = new File(pdfPath).bytes
vars.put("PDF_BINARY_CONTENT", new String(pdfBytes, "ISO-8859-1"))
  • 替换pdfPath为实际文件路径
  • 用ISO-8859-1编码是为了完整保留二进制字节,避免内容损坏

4. 修正你之前的错误点

  • PDF部分的Content-Type必须是application/pdf,而非text/plain
  • 附件传输编码设为binary,不要用7bit
  • SOAP部分的Content-ID要和请求头的start参数对应(如示例中的<soap-part>)
  • 放弃Custom SOAP Sampler插件,HTTP请求采样器更灵活可控

验证方式

  • 添加查看结果树监听器,检查响应是否正常
  • 抓包对比合法客户端(如SOAP UI)的请求结构,确保JMeter请求格式一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 04:01:19