首页 > 解决方案 > 如何从一个请求中保存响应正文并在另一个请求中使用它并在 Postman 中进行一些更改

问题描述

我有一个对 OKTA 的 GET 请求,以检索一些使用一些变量等的信息。它返回一个正文。我有第二个 PUT 类型的请求,我在其中手动粘贴 BODY 并更改一个变量。我正在尝试确定是否可以删除将响应正文从第一个 GET 请求粘贴到第二个 PUT 请求的手动过程。

例如,我有一个 URL:

GET https://{{myurl}}/api/v1/apps/{{instanceid}}

这会像这样在有效负载中返回一些动态 JSON 数据

"blah":{ some more blah
},

"signOn": {
        "defaultRelayState": null,
        "ssoAcsUrlOverride": ""
        "audienceOverride": null,
        "recipientOverride": null
    }

我希望做的是:

PUT  https://{{myurl}}/api/v1/apps/{{instanceid}}
       {replay entire body from 1st request with the modification of

      "ssoAcsUrlOverride": "{{some var that points to a new url}},

}

我看过一些文章显示:

标签: postmanpostman-pre-request-script

解决方案


首先,让我们先验证 JSON 响应。这是带有一些虚拟数据的有效 JSON。

{
    "blah": "some more blah",
    "signOn": {
        "defaultRelayState": "1",
        "ssoAcsUrlOverride": "www.google.com",
        "audienceOverride": "true",
        "recipientOverride": "yes"
    }
}

1)将第一个请求的响应保存到环境变量req_body中,如下所示,

var jsonData = pm.response.json();

pm.environment.set("req_body",  jsonData);

2)在PUT请求中,replace_this_body在body中取另一个环境变量。

在此处输入图像描述

req_body3) 获取我们在 Pre-request 脚本的第一个请求中设置的 E'variable 的值。然后更改它的值并设置当前请求的主体变量。

var requestBody = pm.environment.get("req_body");

requestBody.signOn.ssoAcsUrlOverride = "https://www.getpostman.com";

pm.environment.set("replace_this_body", JSON.stringify(requestBody));

最后,您将获得更新的请求数据到 PUT 请求中!


推荐阅读