天天看点

MetersPhere对接口参数进行加密---get格式请求MetersPhere对接口参数进行加密—get格式请求

MetersPhere对接口参数进行加密—get格式请求

参考我另一篇文章

MetersPhere参数赋值时间戳+对接口参数进行加密—form-data格式请求

现在接口有了新的需求,就是说get请求,参数都在query里,也需要加密,而且接口中很多参数都是公共的,如果每一个接口都需要写一遍的话,太麻烦了,不如放在脚本里

import org.apache.jmeter.config.*;
import org.json.*;
import java.util.*;
import java.text.SimpleDateFormat;
import java.util.Map.Entry;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.UnsupportedEncodingException;

//2022.11.17-14:06:42
// 根据需求转换指定时间格式的时间戳
String form = "yyyy.MM.dd-HH:mm:ss";
Date date=new Date();
SimpleDateFormat sdf = new SimpleDateFormat(form);
String valformat = sdf.format(date);
log.info("当前日期:"+ valformat);
vars.put("valformat", valformat);
long valnext = System.currentTimeMillis();
log.info("时间转时间戳:"+ valnext);
//这里一定要把参数toString,因为这个方法是不可以使用其他类型的。
vars.put("valnext", valnext.toString());



 
//请求截获
String  query = sampler.getUrl().getQuery();
log.info("-------截获请求原路径,也就是请求参数-----"+query);


//请求参数字符串分割处理
String[] temp = query.split("&");
Map m = new HashMap();

for(String s:temp){
    //再根据分割出来的字符串按=号转成k-v
    String[] ms = s.split("=");
    if(ms.length > 1){
        m.put(ms[0], ms[1]);
    }else{
        m.put(ms[0], "");
    }
}

//将我们需要加密的参数也放进去,参与排序和加密
//这些参数,每一个接口都要添加这些参数,那我们就把他们拿出来放到脚本里,这样就省去了很多人力
m.put("timestamp",valnext.toString());
m.put("ttkn",valformat);
m.put("clientId","170976fa8a6466d83be");
m.put("clientSign","21");
m.put("clientVersion","6260");
m.put("osVersion","10");






Map sortedParams = new TreeMap(m); 
StringBuilder builder = new StringBuilder();

//遍历排序后的字典,将所有参数按"keyvalue"格式拼接在一起
for (Entry param : sortedParams.entrySet()) {
	builder.append(param.getKey()).append("=").append(param.getValue()).append("&");
}
String low=builder.toString();
log.info(low);
// String high =low.trim("&");
// log.info(high);
length = builder.length()-1;
log.info(length.toString());
StringBuilder nicehh=builder.substring(0,length);
log.info(nicehh.toString());
//这一步很奇怪,必须定义这个whyotcan,否则直接使用nicehh.append()的话,会报错说string没有append这个方法,不知道为什么
StringBuilder whyotcan = new StringBuilder(nicehh);
whyotcan.append("1345~opo-4%");
log.info(whyotcan.toString());
String signoff=whyotcan.toString();
signs = DigestUtils.md5Hex(signoff);
log.info(signs);


//重新拼接请求
//这些参数,每一个接口都要添加这些参数,那我们就把他们拿出来放到脚本里,这样就省去了很多人力
String newurl = query+"&sign="+signs+"&timestamp="+valnext.toString()+"&ttkn="+valformat+"&clientId="+"170976fa8a6466d83be"+"&clientSign="+"21"+"&clientVersion="+"6260"+"&osVersion="+"10";
log.info("-----------newurl--------------"+newurl);
 
 
//获取请求路径
String path = sampler.getUrl().getPath();
log.info(path);
 
// 把构建好的参数加到query中去
String path_send = sampler.getPath()+newurl;
 
// 重新设置path
sampler.setPath(path+"?"+newurl);
log.info("-----------Api----"+api+"-----请求构造完成!----------");


           
MetersPhere对接口参数进行加密---get格式请求MetersPhere对接口参数进行加密—get格式请求

控制台也没有报错,都是按照我们一步一步调试的

MetersPhere对接口参数进行加密---get格式请求MetersPhere对接口参数进行加密—get格式请求