我正在调用一个需要带有请求正文哈希值的http头的api serice。
我试图在JMeter中使用beanshell post处理器来自动创建请求体的sha-256哈希。哈希值是正确的,直到我在请求体中引入换行符(这是一个痛苦,因为JSON消息跨越几行!)
我认为这与隐藏的角色有关,但我可以解决出错的问题! :(
当我将JMeter生成的哈希值与单独的哈希生成器工具进行比较时,它是完全匹配的,直到有换行符,然后JMeter是错误的。
为什么JMeter会在换行时生成错误的哈希?
我的代码是:
[import org.apache.commons.httpclient.auth.DigestScheme; // necessary imports
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.jmeter.protocol.http.control.Header;
import org.apache.jmeter.services.FileServer;
import javax.xml.bind.DatatypeConverter;
import java.security.*;
String body = sampler.getArguments().getArgument(0).getValue();
String hash = DigestUtils.sha256Hex(body);
log.info(hash);
答案 0 :(得分:0)
您的输入数据是什么?您期望输出什么?
自JMeter 3.1 it is recommended to switch to JSR223 Test Elements and Groovy language以来:
鉴于以下请求正文:
{
"foo": "bar"
}
下一个生成SHA-256十六进制字符串的Groovy代码:
def sha256Hex = { input ->
java.security.MessageDigest.getInstance("SHA-256")
.digest(input.getBytes("UTF-8")).encodeHex().toString()
}
log.info(sha256Hex(sampler.getArguments().getArgument(0).getValue()))
我得到dbc67f71c921b5b7649481a5123d94dfa919748d2962889681d96438033c548f
值,这与我使用https://hash.online-convert.com/sha256-generator生成器看到的基本相同。