4

我刚开始使用jmeter。我的应用程序返回一个带有加密值的 url 作为响应,该响应必须作为获取下一页的请求传递。加密值总是以“=”结尾。“ http://mycompany.com/enc=EncRypTedValue= ”。在将值作为请求传递时,“=”被替换为其他字符,例如 '%3d' ex " http://mycompany.com/enc=EncRypTedValue%3d " 。由于令牌已更改,我的应用程序未处理请求。

4

6 回答 6

5

我花了一段时间才明白这一点,不像网络标准中的其他语言和环境 URI (URL) 不使用引号或一些转义字符来隐藏特殊字符。

相反,需要通过分别编码每个单独的参数来正确编码 URL ,以便构建完整的 URL。在 JavaScript 中,参数的编码/解码分别由 encodeURIComponent() 和 decodeURIComponent() 完成。

例如,以下内容:

http://example.com/?p1=hello=hi&p2=three=3

应在每个参数上使用 encodeURIComponent() 进行编码,以构建以下内容:

http://example.com/?p1=hello%3Dhi&p2=three%3D3

  • 请注意,用于参数 p1= ... p2= 的等号保持不变。
  • 不要尝试对整个 URL 进行编码/解码,这是行不通的。:)
  • 不要被浏览器地址栏/字段上显示的内容所迷惑,那只是人类友好的字符串,当您将其复制到剪贴板时,浏览器就会对其进行编码。

希望这可以帮助某人。

于 2018-07-10T01:38:52.363 回答
4

那么你的应用程序就有问题了,因为这就是它应该被发送的方式。Url 参数应按照rfc3986中的规定进行编码。浏览器甚至可以自动执行此操作,因此如果您的 Web 应用程序无法正常工作,则应将其修复。

如果 URI 组件的数据与保留字符作为分隔符的用途发生冲突,则必须在形成 URI 之前对冲突数据进行百分比编码。

  reserved    = gen-delims / sub-delims

  gen-delims  = ":" / "/" / "?" / "#" / "[" / "]" / "@"

  sub-delims  = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="
于 2013-11-15T07:28:43.757 回答
1

您遇到的是 URL 编码 -=是 URL 中的保留字符,您不能将其附加到未编码的 URL 中。它需要被编码。这显然已经发生在你的案例中。在服务器端,url 参数需要再次解码。不过,这通常是容器的工作。

于 2013-11-15T07:29:11.130 回答
0

根据您的用例,您可以考虑以下方法之一:

  1. 您可以使用正则表达式提取器后处理器来捕获您的响应并将其存储到 JMeter 变量。作为 Java Unicode 字符串的变量,您应该不会遇到额外编码“=”符号的任何问题。

  2. JMeter 提供了 __urldecode 函数,您可以利用它来解码您的请求。

  3. 您可以使用 __Beanshell 函数或 BeanShell 预处理器对请求进行预处理,以解码整个 URL,例如:

    URLDecoder.decode(vars.get("your_URL_to be decoded"),"encoding");
    
于 2013-11-15T09:18:15.307 回答
0

如果您在后续请求中添加加密值作为请求参数,请确保“编码?” 未选中

于 2013-11-15T10:44:39.927 回答
-1

使用引号作为您的值。例如 -Jkey="val=ue"

于 2013-11-15T07:23:06.533 回答