请求头中的JMeter SHA256

carvr3hs  于 2023-08-05  发布在  其他
关注(0)|答案(4)|浏览(142)

我正在使用Jmeter对一个API进行负载测试。请求的头部有一个身份验证请求,需要我使用Base64 url+Nonce+Unix时间戳和SHA256结果值以及密钥。上面的内容需要在header中与Nonce和timestamp沿着传递。
对于上面的场景,我应该创建一个自定义函数还是使用任何预处理器?

mrwjdhj3

mrwjdhj31#

你可以通过Beanshell预处理器来完成,如下所示:
1.添加HTTP头管理器作为HTTP请求采样器的子项
1.以同样的方式添加上述Beanshell预处理器

  • 将以下代码放入预处理器的“脚本”区域:
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;

String url = sampler.getUrl().toString(); // get URL
String nonce = DigestScheme.createCnonce(); // get nonce
long timestamp = System.currentTimeMillis() / 1000L;

String combined = url + nonce + timestamp; // put everything together

byte[] base64 = Base64.encodeBase64(combined.getBytes()); // encode as Base64

String headerValue = DigestUtils.sha256Hex(base64); // encode SHA256 

sampler.getHeaderManager().add(new Header("headerName", headerValue)); // add generated header to request

字符串

  • sampler这里是父HTTP请求采样器类的简写引用,我相信是HTTPSamplerProxy,因此它的方法用于获取URL并添加生成的头值。
  • 生成MD5散列和SHA256十六进制的方法来自Apache Commons库,这些库在JMeter的后台被广泛使用。

有关在JMeter测试中使用Beanshell脚本的更多信息,请参见How to use BeanShell: JMeter's favorite built-in component指南。

t1qtbnec

t1qtbnec2#

最好的办法是在JavaScript模式下使用BSF预处理器来完成客户端通常会做的所有事情。您必须使用客户端JS并修改它以在没有FORM数据的情况下工作。
您可以像客户端一样在JS中构建整个头部。BSF Pre-Processor允许您访问jmeter运行时变量,因此您将创建一个新变量来存储SHA 256哈希值,并在需要授权的示例的HTTP Header Manager中使用该值。

  • 上瘾了
jk9hmnmh

jk9hmnmh3#

下载Eclipse编写了一个自定义的jmeter包。将其作为.jar文件从eclipse导出到jmeterlib/ext文件夹。调用了beanshell采样器中的包函数
谢谢你的回答

zc0qhyus

zc0qhyus4#

@dmitrit的回答很有帮助,但我需要对代码做一些调整才能使其工作。我是这样做的:

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;

String apiKey = vars.get("ApiKey");
String apiSecret = vars.get("ApiSecret");
long timestamp = System.currentTimeMillis() / 1000L;

String combined = apiKey + apiSecret + timestamp;

String generatedSignature = DigestUtils.sha256Hex(combined);

vars.put("GeneratedSignature", generatedSignature);

字符串
请注意,主要的区别在于:

    • 最重要的 *:DigestUtils.sha256Hex采用String而不是字节数组。首先转换为字节搞砸了哈希,我认为是由于填充。
  • 我将得到的值添加到vars中,这样以后就可以在Jmeter中以通常的方式使用它(${GeneratedSignature})。
  • ApiKeyApiSecret在Jmeter用户定义的变量元素中的其他位置定义。

有了这个,我能够使以下工作与Mashery按照他们的身份验证说明张贴here .

相关问题