如何使用RegEx捕获安全令牌以在JMeter中使用?

时间:2017-11-30 21:59:57

标签: regex security jmeter token csrf

我正在使用JMeter的正则表达式提取器从第一个HTTP响应头中捕获安全令牌,以便在将来的请求中使用。

HTTP响应如下:

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJNVE8iLCJpYXQiOiIxNTEyMDcxNTg1Iiwic3ViIjoiOTEzNjQ0NCIsInV0ayI6InUvenBESVBzOCtUSlZUaW5tYVBaUjBqd2xyd2lJU1lSRVJ1ZnphNUVzS2s9IiwidmVyIjoiMi4wLjguNjIiLCJuYmYiOjE1MTIwNzEyODV9.4y__KpTFSgkdD_dMAuMiClbSfcmnvdtr0IEoVHFB_Fw","sessionTimeoutSeconds":1800,"profileRequirements":null}

所以我试图抓住我写RANDOMCHARS的所有角色

{"token":"RANDOMCHARS","sessionTimeoutSeconds":1800,"profileRequirements":null}

我打算使用此网站测试任何建议:https://regexr.com/

任何帮助都将远远超出赞赏! =)

2 个答案:

答案 0 :(得分:1)

代码

See regex in use here

"token"\s*:\s*"([^"]*)"

结果

输入

{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJNVE8iLCJpYXQiOiIxNTEyMDcxNTg1Iiwic3ViIjoiOTEzNjQ0NCIsInV0ayI6InUvenBESVBzOCtUSlZUaW5tYVBaUjBqd2xyd2lJU1lSRVJ1ZnphNUVzS2s9IiwidmVyIjoiMi4wLjguNjIiLCJuYmYiOjE1MTIwNzEyODV9.4y__KpTFSgkdD_dMAuMiClbSfcmnvdtr0IEoVHFB_Fw","sessionTimeoutSeconds":1800,"profileRequirements":null}

输出

以下输出是捕获组1

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJNVE8iLCJpYXQiOiIxNTEyMDcxNTg1Iiwic3ViIjoiOTEzNjQ0NCIsInV0ayI6InUvenBESVBzOCtUSlZUaW5tYVBaUjBqd2xyd2lJU1lSRVJ1ZnphNUVzS2s9IiwidmVyIjoiMi4wLjguNjIiLCJuYmYiOjE1MTIwNzEyODV9.4y__KpTFSgkdD_dMAuMiClbSfcmnvdtr0IEoVHFB_Fw

说明

  • "token"按字面意思匹配
  • \s*匹配任意数量的空白字符
  • :按字面意思匹配
  • \s*匹配任意数量的空白字符
  • "按字面意思匹配
  • ([^"]*)将除"以外的任何字符捕获到捕获组1
  • "与此字面匹配

答案 1 :(得分:0)

请注意,自JMeter 3.0以来,您有JSON Extractor,它用于使用JsonPath语言从JSON获取值,这种语言比正则表达式更快,更简单,更稳定。

相关配置为:

  • 变量名称:任何有意义的内容,即token
  • JSON路径表达式:$.token

如果是这样,您将能够在必要时将提取的值称为${token}

演示:

JMeter JSON Path Extractor

更多信息:API Testing With JMeter and the JSON Extractor