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

Posted

技术标签:

【中文标题】邮递员:如何从 html 响应中提取值并将其传递给邮递员中的下一个请求【英文标题】:Postman: How to extract value from html response and pass it on to next request in postman 【发布时间】:2019-01-25 22:45:21 【问题描述】:

示例网址: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 响应。

我可以在 JMeter 上使用 Regex 执行此操作,但在 Postman 上却很难做到。

谢谢!

【问题讨论】:

你可以看看使用 Cheerio 来获取值,它是 Postman 中的内置模块之一 - github.com/cheeriojs/cheerio/blob/master/Readme.md 我无法通过 Cheerio 获得价值,请告诉我如何操作。 更新了答案和使用示例。 【参考方案1】:

您可以查看使用 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())

我相信您可以使用它从您的示例中获得所需的价值。

【讨论】:

它适用于 html,但不适用于上面发布的示例。 我的回答是您可以从 HTML 页面获取值的示例。不是解决您的特定问题的完美解决方案。【参考方案2】:

尝试通过 Json.parse 将响应包装起来,然后使用 javascript 的 splice 方法拼接这个响应,无论你觉得舒服。

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

【讨论】:

【参考方案3】:

我的示例如何从 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);

【讨论】:

以上是关于邮递员:如何从 html 响应中提取值并将其传递给邮递员中的下一个请求的主要内容,如果未能解决你的问题,请参考以下文章

从 Django 中的 JsonResponse 中提取字段值并将其传递给 Ajax Jquery

如何从邮递员的响应标头中提取特定的字符串值?

使用邮递员从请求中获取令牌并将其发送给另一个

如何从文本字段中获取值并将其传递给变量?

邮递员从 JSON 中获取值,其中等于使用 javascript 的数组中的值

从 Django HTML 表单中检索数据并将其传递给 MySQL 数据库