I write the below code when I use Gatling3:
class KsSignatureCalculator extends SignatureCalculator {
override def sign(request: Request): Unit = {
val list = new util.ArrayList[String]()
var salt = ""
var secrect_key = ""
val query = request.getUri.getEncodedQueryParams
for (i <- 1 to query.size()) {
if (query.get(i-1).getName == "salt") {
salt = query.get(i-1).getValue
}
if (query.get(i-1).getName == "client_key") {
if (query.get(i-1).getValue == "xyz") {
secrect_key = "xyz-xyz" // android
} else { // "abc"
secrect_key = "abc-abc" // ios
}
}
val paramString = query.get(i-1).getName + "=" + query.get(i-1).getValue
list.add(paramString)
}
val body = request.getBody
var form: util.List[Param] = Collections.emptyList()
if (body.isInstanceOf[FormUrlEncodedRequestBody]) {
form = body.asInstanceOf[FormUrlEncodedRequestBody].getContent
} else if (body.isInstanceOf[MultipartFormDataRequestBody]) {
// todo
}
for (i <- 1 to form.size()) {
if (form.get(i-1).getName == "salt") {
salt = form.get(i-1).getValue
}
val paramString = form.get(i-1).getName + "=" + form.get(i-1).getValue
list.add(paramString)
}
Collections.sort(list)
val sb = new StringBuilder
for (j <- 1 to list.size()) {
sb.append(list.get(j-1))
}
sb.append(secrect_key)
val sig = md5Hex(sb.toString)
request.getUri.getEncodedQueryParams.add(new Param("sig", sig))
if (token_client_salt != "") {
val tokenSig = sha256Hex(sig + token_client_salt)
request.getUri.getEncodedQueryParams.add(new Param("__NStokensig", tokenSig))
}
println(request) // Why not output sig and __NStokensig??
}
}
I hope update request to add new Param.
Why request not update?
How should I do?
thanks!!!