JMeter中如何发送经URL编码的加密请求数据?
解决JMeter加密数据未URL编码的问题
问题根源
你当前的JSR223代码只完成了AES加密,没对加密结果做URL编码,而且代码里的字符串写法有语法错误,这才导致请求体里的加密数据没被正确编码。
具体解决步骤
1. 修改JSR223 Sampler代码
在加密后直接对结果做URL编码,同时修正字符串的语法问题:
// 修正原始字符串写法,避免语法报错 def plainText = '{"MY_SENTENCE"}' // 执行AES加密 def encrypted = Crypto.encrypt("AES/CBC/PKCS5Padding", plainText, Crypto.generateSecretKey(), Crypto.generateIv()) // 用Java的URLEncoder对加密结果做URL编码,指定UTF-8格式 def urlEncodedData = java.net.URLEncoder.encode(encrypted, "UTF-8") // 将编码后的结果存入变量 vars.put("enc_data", urlEncodedData);
2. 保持HTTP请求的Body Data不变
还是在HTTP请求的Body Data里写:
{ "data": "${enc_data}" }
补充说明
- 加密后的内容如果包含
+、&这类URL特殊字符,不编码的话会被服务器解析错误,URL编码会把它们转成%2B、%26这类安全格式。 - Body Data模式下JMeter不会自动对变量内容做URL编码,必须手动在代码里完成这一步,仅设置内容编码无效。
内容的提问来源于stack exchange,提问作者sinc_lee
相关产品推荐
相关产品推荐

