Javascript 如何在Postman中使用请求前脚本从另一个请求运行一个请求

Javascript 如何在Postman中使用请求前脚本从另一个请求运行一个请求,javascript,postman,Javascript,Postman,我正试图通过点击邮递员发送一个经过身份验证的请求 所以,我有一个名为“Oauth”的请求,它位于一个局部变量中 var jsonData = JSON.parse(responseBody); postman.setEnvironmentVariable("token", jsonData.access_token); 我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从请求前脚本) 有没有一种方法可以通过单击一个邮递员按钮来获取访问令牌并发送一个经过身份验证的请求?您不

我正试图通过点击邮递员发送一个经过身份验证的请求

所以,我有一个名为“Oauth”的请求,它位于一个局部变量中

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", jsonData.access_token);
我现在要做的是,对于需要承载令牌的任何其他请求,自动运行Oauth请求(从请求前脚本)


有没有一种方法可以通过单击一个邮递员按钮来获取访问令牌并发送一个经过身份验证的请求?

您不能从
请求前脚本
部分发送另一个请求,但实际上,可以链接请求并一个接一个地运行

您可以将请求收集到collection中,并使用
collection Runner

要查看请求结果,您可以按照

注意:现在有一种在预请求脚本中执行此操作的方法,请参阅。我将把这个答案留给子孙后代,但大家都知道:)

我认为在预请求脚本中还没有实现这一点的方法,但如果使用变量和“测试”选项卡,只需单击几下即可,但其要点是:

  • 像平常一样设置身份验证请求
  • 在该请求的测试部分,将该请求的结果存储在变量中,可能类似于以下内容:

    var data = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", data.token);
    
    pm.sendRequest({
        url: pm.environment.get("token_url"),
        method: 'GET',
        header: {
            'Authorization': 'Basic xxxxxxxxxx==',
        }
    }, function (err, res) {
        pm.environment.set("access_token", res.json().token);
    });
    
  • 运行身份验证请求——您现在应该看到为该环境设置了
    token
    (单击右上角的眼睛状图标)

  • 将数据请求设置为使用
    {{{token}}
    以前粘贴在承载令牌中的任何位置
  • 运行您的数据请求——现在应该对其进行正确的身份验证

  • 要刷新令牌,您需要做的就是重新运行身份验证请求。

    有点晚了,但是对于遇到此帖子的其他人,现在可以从
    请求前脚本
    部分发送另一个请求。这里可以找到几个例子:

    正如KBusc所提到的,受这些例子的启发,您可以通过设置如下预请求脚本来实现您的目标:

    var data = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", data.token);
    
    pm.sendRequest({
        url: pm.environment.get("token_url"),
        method: 'GET',
        header: {
            'Authorization': 'Basic xxxxxxxxxx==',
        }
    }, function (err, res) {
        pm.environment.set("access_token", res.json().token);
    });
    

    然后,您只需引用
    {{access\u token}}
    作为任何其他环境变量。

    您可以向集合添加一个请求前脚本,该脚本将在每个邮递员请求之前执行。例如,我使用以下命令从Apigee返回访问令牌

    var jsonData = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", jsonData.access_token);
    
    const echoPostRequest = {
      url: client_credentials_url,
      method: 'POST',
      header: 
          'Authorization: Basic *Basic Authentication string*'
    
    };
    
    var getToken = true;
    
    if (!pm.environment.get('token'))
    
    {
        console.log('Token  missing')
    
    }
    else 
    {
    
        console.log('Token all good');
    }
    
    if (getToken === true) {
        pm.sendRequest(echoPostRequest, function (err, res) {
        console.log(err ? err : res.json());
            if (err === null) {
                console.log('Saving the token');
                console.log(res);
                var responseJson = res.json();
                console.log(responseJson.access_token);
                pm.environment.set('token', responseJson.access_token)
    
    
            }
        });
    }
    

    我尝试了多种解决方案,下面的解决方案与解析请求1的响应并将任何变量传递到第二个请求参数的时间有关。(在本例中,变量为Lastname。)

    注意:-数据和用户是JSON对象``

    postman.clearGlobalVariable("variable_key");
    postman.clearEnvironmentVariable("variable_key");
    tests["Body matches string"] = responseBody.has("enter the match string ");
     var jsonData = JSON.parse(responseBody);
      var result = jsonData.data;
      var lastName = result.user.lastName;
    tests["Body matches lastName "] = responseBody.has(lastName);
    tests["print  matches lastName " + lastName ] = lastName;
    

    您可以使用postman的sendRequest函数

    这里有一些例子


    我意识到这是问题首先要做的事情,但搜索标题时很容易,因为我不知道这一点(感谢您将我的想法设置为正确的方式)现在,您将得到
    标识符“数据”已经在代码上方声明了。要修复它,我们只需要重命名变量
    data
    ->
    body
    ,您实际上可以从请求前脚本发送请求:@KBusc您可能想将其作为一个答案写出来!是的,您可以从以下预请求脚本发送请求:pm.sendRequest(“,function(err,response){console.log(response.json());});这应该是公认的答案