HTTP 响应 Header 正则表达式

HTTP Response Header Regex

我曾计划使用 Jmeter Regex Extractor 在 HTTP 响应 Header 中获取 Session ID。这是 HTTP Header 的示例:

HTTP/1.1 200 OK
x-powered-by: yoke
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,DELETE,PUT
Access-Control-Allow-Headers: X-Requested-With,jsessionid,Origin,Accept,Content-Type
Access-Control-Expose-Headers: Content-Size,Message,Total-Pages,Total-Count,Current-Page,jsessionid,Origin,Total-Outstanding,Content-Range
content-type: application/json
jsessionid: 10838d69-f9ac-4c70-b1f7-9447a7a6a463
Content-Length: 106

我需要得到的是:

10838d69-f9ac-4c70-b1f7-9447a7a6a463

我使用这个正则表达式:

jsessionid: [^\n]+

但我得到:

jsessionid: 10838d69-f9ac-4c70-b1f7-9447a7a6a463

你能帮我吗? 谢谢

此致, 斯特菲奥

查看 lookaround 的正则表达式,对于您的特定情况,它会是 lookbehind 正则表达式。这完全可行,但未经测试:

(?<=jsessionid:\s).+

(?<=jsessionid:\s) 部分表示字面匹配 jsessionid: 但不将其包含在结果中

使用正则表达式

jsessionid: ([^\n]+)

和模板

$

您的问题与正则表达式分组有关。 Group 0是整个匹配,这是Jmeter Regex Extractor默认的。第 1 组是第一组括号内的正则表达式匹配的内容。模板 $1$ 表示使用第 1 组的内容作为结果。正则表达式分组可能会变得更加复杂,因此如果您想从正则表达式中获取多个值,请阅读教程。 Jmeter Regex Extractor user manual

JSESSIONID 基本上是一个 cookie,所以我认为您不需要使用正则表达式来提取它。

我能想到您可能需要它的 2 种情况:

  1. 您需要将其作为 header
  2. 与下一个请求一起传递
  3. 你需要它的其他价值

在这两种情况下,您都可以使用 HTTP Cookie Manager

  • 对于第一个选项:它会自动处理 cookie
  • 对于第二个选项:给定 CookieManager.save.cookies 属性 设置为 true 您应该能够访问 ${COOKIE_JSESSIONID}
  • 的 cookie 值