BeanShell PreProcessor获取请求body生成签名后重新发送

代码参考:https://blog.csdn.net/syd505/article/details/120347728

 HttpRequest-body:{"userId":"1","tel":"${tel}","interCode":"${interCode}","currentTime":"${__time(,)}","sign":""}

 BeanShell PreProcessor:

import com.guosen.aes.AES;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.config.Argument;

import java.io.*;
import org.json.*;

Arguments arguments = sampler.getArguments();   // 获取请求
Argument arg = arguments.getArgument(0);   // 获取请求中的body内容

String content = arg.getValue();

JSONObject dataObj = new JSONObject(content);

List keyArry = new ArrayList();   // 创建list存储body中的key值
Iterator iterator = dataObj.keys();   // 生成迭代对象

// 循环key,将其放入list
while (iterator.hasNext()) {
	String key = (String) iterator.next();
	// 去除sign
	if (!key.equals("sign") && !key.equals("Sign")) {
		keyArry.add(key);
	}
}

Collections.sort(keyArry);   // 对list进行排序

// 循环list中的key,读取对应的Value组成字符串
String re = "";
for (String s : keyArry) {
	String str = dataObj.getString(s);
	if (!str.equals("")) {
		re += str;
	}
}

String AES_KEY = "fed366421e9403a5d87c227add999238";
String result = "";
result= new AES().crypto(re,AES_KEY);
System.out.println(result);
vars.put("sign",result.toString());
log.info(result.toString());

// 添加sign字段
dataObj.put("sign", result.toString());
String postData = dataObj.toString();
// 重新设置http request body arg.setValue(postData); log.info("****************"+arg.getValue());

遇到问题:

      刚开始写的  HttpRequest-body:{"userId":1,"tel":"38969631","interCode":"021","currentTime":"1634261066855","sign":${sign}}

      1、 提示 Typed variable declaration : Object constructor

   content = {"userId":"1","tel":"38969631","interCode":"021","currentTime":"1634261066855","sign":${sign}}

      JSONObject dataObj = new JSONObject(content); 

          JSONObject构造问题:https://blog.csdn.net/androidyue/article/details/9255035

          本次问题是 因为"sign":${sign}而导致了JSONObject构造函数失败,解决:将${sign}改为“”

    2、 HttpRequest-body的userId一开始写成了int 类型 1,导致 dataObj.getString(s);失败

    String re = "";
    for (String s : keyArry) {
	    String str = dataObj.getString(s);
	    if (!str.equals("")) {
		    re += str;
	    }
    }

 Jar下载

posted on 2021-10-15 09:39  Old-Kang  阅读(507)  评论(0)    收藏  举报