邮递员:如何从html响应中提取值并将其传递给邮递员中的下一个请求

时间:2018-08-19 17:06:14

标签: regex postman postman-collection-runner

示例网址:https://abc.xyz.com/m# HTML响应:

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
.
.
</head>
<body class="abc">        
.
.
.
<script>xab.start('{\"first\":\"123xyz\",\"second\":\"abc123\",\"third"..;</script>
</div>
</body>
</html>

在上述响应中,我想从响应中提取参数 second '(“ second \”:\“ abc123 \”)'的值并将其传递给下一个请求

如果响应为JSON,则更为简单,但如果是HTML响应,则为

我能够使用Regex在JMeter上做到这一点,但又很难在Postman上做到这一点。

谢谢!

4 个答案:

答案 0 :(得分:2)

您可以考虑使用Cheerio来获取值,它是Postman本机应用程序中的内置模块之一。

您可以添加类似以下示例的内容,以从HTML中提取值。

这是从jsonplaceholder页的title html标记获取值,然后将其设置为environment变量:

const $ = cheerio.load(pm.response.text())

pm.test("it should return a title", () => { 
    pm.expect($('title').text()).to.not.be.empty 
})

pm.environment.set('title', $('title').text())

Postman_Cheerio

我确定您可以使用它从示例中获取所需的值。

答案 1 :(得分:0)

假设您在"字段中没有任何second标记,这将起作用:

\\"second\\":\\"(.*?)\\",

示例:https://regex101.com/r/yl8Z6M/1

如果这样做,那么这不在正则表达式的范围之内,并且是一种上下文无关的语法,您需要以其他方式进行解析

答案 2 :(得分:0)

尝试通过Json.parse包装响应,然后使用子字符串JavaScript的splice方法对响应进行拼接,只要您觉得舒服即可。

之后,通过setVariable方法将其保存在变量中,然后可以在其他请求中使用它。

答案 3 :(得分:0)

我的示例如何从html响应中的脚本标签获取数据

const $ = cheerio.load(pm.response.text())
var script = ($('script').text().replace("window.__STATE__ = ",""));

var jsonData = JSON.parse(script);

var uid = pm.environment.get("uid");
if (jsonData.stared == uid) pm.environment.set('reactArticle', false);
else {pm.environment.set('reactArticle', true);}