JMeter调用WSSE安全服务时遇ClientProtocolException异常求助
JMeter中WSSE安全服务压测的正确配置与异常排查
org.apache.http.client.ClientProtocolException的常见触发原因
- 录制请求时格式被破坏:JMeter代理录制WSSE请求时,可能篡改SOAP信封内的WSSE头部,导致协议格式不合法。
- 前置处理器配置冲突:录制的请求中已包含SoapUI生成的WSSE Token,再添加
SOAP Message Username Token会导致重复生成Token,触发协议错误。 - 请求头配置错误:WSSE服务通常要求特定的
Content-Type,若录制后该字段被修改,会引发异常。
正确配置步骤
1. 清理录制的请求内容
打开JMeter中录制完成的HTTP请求,检查SOAP Body,删除所有SoapUI自动生成的<wsse:Security>标签及其内部内容,仅保留业务相关的SOAP信封结构。
2. 配置SOAP Message Username Token前置处理器
给目标HTTP请求添加前置处理器(路径:右键HTTP请求 → 前置处理器 → SOAP Message Username Token),按以下要求配置:
- Username:填入服务要求的用户名
- Password:填入对应密码
- Password Type:选择与SoapUI一致的类型(常用
PasswordText或PasswordDigest) - Add Nonce:勾选(若服务要求随机Nonce)
- Add Created:勾选(若服务要求时间戳)
- SOAP Version:匹配服务使用的SOAP版本(1.1或1.2)
- Namespace Prefix:填入服务期望的前缀(通常为
wsse,需与服务端定义一致)
3. 校验请求头
确保HTTP请求的Content-Type头符合要求:
- SOAP 1.1:
text/xml;charset=utf-8 - SOAP 1.2:
application/soap+xml;charset=utf-8
删除录制过程中带入的SoapUI特定请求头(如SOAPAction以外的非标准头)。
4. 单线程验证
先运行单线程请求,通过查看结果树对比JMeter生成的请求与SoapUI成功请求的差异:
- 检查WSSE头部的Nonce、Created字段格式是否一致
- 确认Password的编码(明文或摘要)是否匹配服务要求
- 核对SOAP信封的命名空间、结构是否完全对齐
额外排错点
- 若使用
PasswordDigest,需确认前置处理器的摘要算法(默认SHA-1)与服务端要求一致,不一致时需通过JMeter自定义函数或脚本调整。 - 部分WSSE服务要求Token包含特定属性(如
wsu:Id),可在前置处理器的Advanced选项中添加对应配置。
内容的提问来源于stack exchange,提问作者Sri
相关产品推荐
相关产品推荐

