jmeter 请求发送加密参数(其中包含Json嵌套)
来源:互联网 发布:网易公开课mac版 编辑:程序博客网 时间:2024/06/07 17:07
jmeter 请求发送加密参数(其中包含Json嵌套)
某个接口的请求参数非常多,并且接口请求要求有MD5签名校验;签名的方式为在Headers或是请求中包含一个sign参数,该参数值通过对URL、Method、Body的拼接字符串进行MD5计算后得到。
- 验签的方法实现
- 请求参数的组装加密生成signature,var.put生成signature,供Sample使用
验签的方法实现
代码块
建立BeanShell PreProcessor,例如:
“` java
import java.util.Map;
import org.open.sdk.java.common.Constants;
import org.open.sdk.java.common.enums.OpenSdkSupportHttpMethod;
import org.open.sdk.java.exception.OpenSdkException;
import org.open.sdk.java.http.client.OpenPlatformClient;
import org.open.sdk.java.tools.CommonUtils;
import org.open.sdk.java.tools.SignatureUtils;
import org.open.sdk.java.tools.MyStringUtil;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Iterator;
import java.util.TreeMap;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
String secret = “${appKey}”;
Map params = new HashMap();
params.put(“appId”, “
params.put(“scope”, “ACCESSTOKEN”);
params.put(“timestamp”, “${timestamp}”);
params.put(“channel”, “H5”);
// 先将参数以其参数名的字典序升序进行排序
Map sortedParams = new TreeMap(params);
Set entrys = sortedParams.entrySet();
// 遍历排序后的字典,将所有参数按"key=value"格式拼接在一起 StringBuilder basestring = new StringBuilder(); Iterator it = entrys.iterator(); while(it.hasNext()){ Entry param = (Entry) it.next(); String key = (String)param.getKey(); String value = (String)param.getValue(); if(MyStringUtil.isEmpty(value)){ value = ""; } basestring.append(key).append("=").append(value); } basestring.append(secret); // 使用MD5对待签名串求签 byte[] bytes = null; try { MessageDigest md5 = MessageDigest.getInstance("MD5"); bytes = md5.digest(basestring.toString().getBytes("UTF-8")); } catch (GeneralSecurityException ex) { throw new IOException(ex); } // 将MD5输出的二进制结果转换为小写的十六进制 StringBuilder sign = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() == 1) { sign.append("0"); } sign.append(hex); }
vars.put(“signature”, sign.toString());
脚注
其实加密方法不需要自己写,使用开发封装完成的方法直接调用即可,但是为了直观明了,自己板门弄虎的重写了一次。
请求参数的组装加密生成signature,var.put生成signature,供Sample使用,其中请求参数包含List参数
代码块
import java.util.Map;
import org.open.sdk.java.common.Constants;
import org.open.sdk.java.common.enums.OpenSdkSupportHttpMethod;
import org.open.sdk.java.exception.OpenSdkException;
import org.open.sdk.java.http.client.OpenPlatformClient;
import org.open.sdk.java.tools.CommonUtils;
import org.open.sdk.java.tools.SignatureUtils;
import org.open.sdk.java.tools.MyStringUtil;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Iterator;
import java.util.TreeMap;
import java.util.Date;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
JSONObject jsonObject = new JSONObject(); List list = new ArrayList(); HashMap map1 = new HashMap(); map1.put("outRepaymentPlanNo", "${outRepaymentPlanNo1}"); map1.put("payableFee","36000"); map1.put("payableInterest","100000"); map1.put("payableLateFee","36000"); map1.put("payableFee","0"); map1.put("payableManagementFee","72000"); map1.put("payablePenalty","0"); map1.put("payablePrincipal","6000000"); map1.put("payableServiceFee","36000"); map1.put("payableTotal","6244000"); map1.put("period",1); map1.put("preIouDate","2017-08-18 11:00:30"); HashMap map2 = new HashMap(); map2.put("outRepaymentPlanNo","${outRepaymentPlanNo2}"); map2.put("payableFee","0"); map2.put("payableInterest","100000"); map2.put("payableLateFee","0"); map2.put("payableFee","0"); map2.put("payableManagementFee","0"); map2.put("payablePenalty","0"); map2.put("payablePrincipal","6000000"); map2.put("payableServiceFee","0"); map2.put("payableTotal","6100000"); map2.put("period","2"); map2.put("preIouDate","2017-08-18 11:00:30"); String param1= JSON.toJSONString(map1); System.out.println("---param1----" + param1); String param2= JSON.toJSONString(map1); System.out.println("---param2----" + param2); list.add(map1); list.add(map2); jsonObject.put("list", list); System.out.println(jsonObject); //log.info("\n\n===============获取的变量param1为" + param1); //log.info("\n\n===============获取的变量param2为" + param2); //log.info("\n\n===============获取的变量jsonObject为" + jsonObject); String jsonplans=JSON.toJSONString(jsonObject); log.info("\n\n===============获取的变量jsonplans为" + jsonplans); vars.put("repaymentPlanList", jsonplans); String secret = "${appKey}"; Map params = new HashMap(); params.put("appId", "${appId}"); params.put("sourceNo", "1000300003"); params.put("timestamp", "20170818110035"); params.put("accessToken", "${accessToken}"); params.put("feeRate", "30"); params.put("frontNotifyUrl", "http://payex.aiyoumi.com"); params.put("latePenaltyRate", "0"); params.put("loanAmount", "12000000"); params.put("loanApplyNo", "2017081816391160"); params.put("loanProductNo", "TF01"); params.put("loanRate", "1000"); params.put("managementFeeRate", "60"); params.put("maturityDate", "2017-08-18 11:00:33"); params.put("merchantNo", "1000300003"); params.put("notifyUrl", "http://payex.aiyoumi.com"); params.put("outCustomerId", "18686868888"); params.put("outCustomerName", "周一"); params.put("paymentDayPerMonth", "05"); params.put("penaltyRate", "100"); params.put("repaymentMode", "2"); params.put("repaymentPhase", "2"); params.put("serviceFeeRate", "30"); params.put("loanSerialNo", "2017081816391160"); params.put("loanTimeLimit", "365"); params.put("repayInterestAmt", "200000"); params.put("repayManagementFee", "72000"); params.put("repayPrincipalAmt", "12000000"); params.put("repayServiceFee", "36000"); params.put("repayTotalAmt", "12344000"); params.put("certificateNo", "15010319850602176X"); params.put("fee", "36000"); params.put("account", "666611777777777777"); params.put("accountName", "周一"); params.put("applyTime", "2017-08-18 11:00:31"); params.put("bankCode", "ABC"); params.put("bankName", "中国农业银行"); params.put("bankOfAccount", "深圳分行"); params.put("certificateType", "1"); params.put("discountAmt", "0"); params.put("endTime", "2017-08-18 11:00:32"); params.put("loanMode", "1"); params.put("loanProductName", "粤科1号"); params.put("mobile", "18686868888"); params.put("startTime", "2017-08-18 11:00:34"); params.put("urlKey", "loan_signed"); params.put("repaymentPlanList", jsonplans);//获取List对象 // 先将参数以其参数名的字典序升序进行排序 Map sortedParams = new TreeMap(params); Set entrys = sortedParams.entrySet(); // 遍历排序后的字典,将所有参数按"key=value"格式拼接在一起 StringBuilder basestring = new StringBuilder(); Iterator it = entrys.iterator(); while(it.hasNext()){ Entry param = (Entry) it.next(); String key = (String)param.getKey(); String value = (String)param.getValue(); if(MyStringUtil.isEmpty(value)){ value = ""; } log.info("---验签的参数----" + param); basestring.append(key).append("=").append(value); } basestring.append(secret); // 使用MD5对待签名串求签 byte[] bytes = null; try { MessageDigest md5 = MessageDigest.getInstance("MD5"); bytes = md5.digest(basestring.toString().getBytes("UTF-8")); } catch (GeneralSecurityException ex) { throw new IOException(ex); } // 将MD5输出的二进制结果转换为小写的十六进制 StringBuilder sign = new StringBuilder(); for (int i = 0; i < bytes.length; i++) { String hex = Integer.toHexString(bytes[i] & 0xFF); if (hex.length() == 1) { sign.append("0"); } sign.append(hex); } vars.put("loansignature", sign.toString());
- jmeter 请求发送加密参数(其中包含Json嵌套)
- Jmeter请求参数Json格式
- jmeter请求数据加密在发送方法
- jmeter完成md5加密的接口请求参数
- jmeter完成md5加密的接口请求参数
- JMeter模拟请求发送,并带上自定义Header,参数,Cookie
- jmeter发送soap请求
- jmeter发送HTTPS请求
- JMeter压力测试post请求json参数来源文件
- JMeter 动态参数请求
- Apache Jmeter发送post请求
- jmeter怎么发送https请求
- jersey webService客户端发送put请求并传递json参数
- Android/java 利用HttpUrlConnection 发送put请求,携带json参数
- ExtJS发送POST请求 参数格式为JSON
- 利用HttpClient 发送Patch请求,携带Json参数
- Json嵌套Json取参数
- jmeter java请求参数配置
- Python
- Kylin报错classnotfound:org.apache.hadoop.hive.serde2.typeinfo.typeInfo
- Java垃圾回收机制
- 转载:管道通信总结
- html5中新增两个表单属性,分别autocomplete和novalidate属性
- jmeter 请求发送加密参数(其中包含Json嵌套)
- $.post()方法
- nginx安装以及注意事项
- 【USACO TRAINING】货币系统
- XZ_CSS之CSS布局- float属性/position属性、标签的居中
- hadoop数据类型与java 数据类型的转换
- bind&call&apply
- webstom新增vue模板
- 最新Android Glide4.0加载Gif图片到ImageView