Java 如何参与动态http请求并对其进行加密,以及使用Jmeter替换http请求内的结果

Java 如何参与动态http请求并对其进行加密,以及使用Jmeter替换http请求内的结果,java,api,http,encryption,jmeter,Java,Api,Http,Encryption,Jmeter,我是jmeter的新手。我有一个动态http请求,其中某些值取决于前一个http请求的值。还有一个encryptedKey和值。此值是基于动态的详细信息对象计算的。我正在编写一个java函数来加密动态请求的一部分。encryptedValue必须由java函数的结果替换。动态Http请求:- { "ver": "1.0", "timestamp":"2019-08-28T11:39:57.153Z", "Details": { "key": "Previous API

我是jmeter的新手。我有一个动态http请求,其中某些值取决于前一个http请求的值。还有一个encryptedKey和值。此值是基于动态的详细信息对象计算的。我正在编写一个java函数来加密动态请求的一部分。encryptedValue必须由java函数的结果替换。动态Http请求:-

{
  "ver": "1.0",
  "timestamp":"2019-08-28T11:39:57.153Z",
  "Details": {
        "key": "Previous API call value",
        "key": "Previous API call value"
      },
  "EncryptedKey": "EncryptedValue"
}
我只需要获取Details对象并对其应用encrypt util。然后我必须用java函数的结果替换“EncryptedValue”,然后发出http请求。在jmeter中如何执行此操作

到目前为止,我所尝试的:-

目前,我正在将details对象加载到一个单独的文件中,并使用java读取它并对其进行加密

因此,我的最终http请求如下所示:-

{
  "ver": "1.0",
  "timestamp":"2019-08-28T11:39:57.153Z",
  "Details": {
        "key": "Previous API call value",
        "key": "Previous API call value"
      },
  "EncryptedKey": "${__groovy(new com.util.Encryption().encryptData(), encryptedValue)}"
}

但这不能用上一个http请求的结果替换“上一个API调用值”。是否有其他的方法来解决这个问题?

< P>如果你想完全替换请求体,你可以考虑使用和使用这样的代码:

免责声明:我不能保证下面的代码能够工作,因为您的示例请求数据不是有效的JSON,我不知道您的
Encryption().encryptData()函数是如何实现的

但是您必须重新编写
com.util.Encryption().encryptData()
函数,以将密钥作为参数,而不是从文件系统读取它

在上面的代码示例中,
sampler
代表类,有关所有可用函数,请参见JavaDoc


另外,还可以查看关于这些类的更多信息,而关于JMeter中Groovy脚本的全面概述的文章一般都会尝试一下。示例请求是有效的json。
def requestBody = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def key = requestBody.Details.key
requestBody.EncryptedKey = new com.util.Encryption().encryptData(key)
def arguments = new org.apache.jmeter.config.Arguments()
sampler.setArguments(arguments)
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(requestBody).toPrettyString(),'')
sampler.setPostBodyRaw(true)