如何在Postman中基于上一个请求的响应构建自定义请求工作流?

f4t66c6m  于 2023-01-05  发布在  Postman
关注(0)|答案(1)|浏览(225)

我有一个请求需要一些时间在Logic Apps中处理,所以我建立了一个async pattern。然后,在响应(202状态类型)中有一个“location”头值,其URL值如下:
https://example.com/checkJobId/218764
服务器返回一个带有“location”和“retry-after”头值的响应,我希望Postman使用相同的凭据进入那个位置,直到它返回一个200响应。
我在文档中查到,您可以通过名称或ID链接不同的请求;也许唯一的解决方案是将Job ID作为响应头中的“job-id”值分离出来,并将其传递给Postman中我的集合下的新请求,但我想知道是否可以直接这样做,而不必更改服务器的响应。

qcuzuvrc

qcuzuvrc1#

得知ChatGPT AI回答了我的问题,我很激动(同时也有些恐惧😅)。我将它发布在这里。
可以,可以在Postman中发送带有202状态代码和“location”标头的响应。202状态代码表示请求已收到并正在处理,但尚未完成。“location”标头用于提供一个URL,以便稍后检查请求的状态。
要在Postman中实现此重试逻辑,您可以使用脚本发送初始请求,然后循环以将请求重新发送到“location”头中提供的URL,直到收到状态代码为200的响应。以下是Postman脚本中的示例:

// Send initial request and get response
pm.sendRequest({
  url: "https://example.com/api/async-task",
  method: "POST",
}, function(err, res) {

  // If status code 202 is received, get the "location" header URL
  if (res.status === 202) {
    var location = res.headers.get("location");

    // Start retry loop
    for (var i = 0; i < 10; i++) {

      // Send request to "location" header URL and get response
      pm.sendRequest({
        url: location,
        method: "GET",
      }, function(err, res) {

        // If status code 200 is received, exit loop
        if (res.status === 200) {
          break;
        }

        // If status code is not 200, wait 1 second and retry
        else {
          pm.setNextRequest("Delay", 1000);
        }
      });
    }
  }
});

相关问题