web-dev-qa-db-fra.com

Comment exécuter une requête d'une autre à l'aide du script de pré-requête dans Postman

J'essaye d'envoyer une demande authentifiée avec un clic dans le facteur.

J'ai donc une requête nommée "Oauth" et J'utilise des tests pour stocker le jeton dans une variable locale.

var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("token", jsonData.access_token);

Ce que j'essaie de faire maintenant, c'est d'exécuter automatiquement la requête Oauth (à partir d'un script de pré-requête)) pour toute autre requête nécessitant un jeton porteur.

Existe-t-il un moyen d'obtenir un jeton d'accès et d'envoyer une demande authentifiée en un clic sur un facteur?

26
Lasharela

NOTE: Il existe maintenant un moyen de le faire dans un script de pré-requête, voir les autres réponses . Je vais garder cette réponse pour la postérité mais juste pour que tout le monde sache :)

Je ne pense pas qu'il soit possible de faire cela dans le script de pré-demande pour l'instant, mais vous pouvez le réduire en quelques clics si vous utilisez une variable et l'onglet Tests. Il y a des instructions plus complètes sur le blog Postman , mais l'essentiel est:

  1. Configurez votre demande d'authentification comme d'habitude.
  2. Dans la section Tests de cette demande, stockez le résultat de cette demande dans une variable, éventuellement du type suivant:

    var data = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", data.token);
    
  3. Exécutez la demande d'authentification - vous devriez maintenant voir que token est défini pour cet environnement (cliquez sur l'icône en forme d'œil en haut à droite).

  4. Configurez votre demande de données pour utiliser {{token}} où que vous ayez auparavant collé dans le jeton porteur.
  5. Exécutez votre demande de données - elle devrait maintenant être correctement authentifiée.

Pour actualiser le jeton, il vous suffit de réexécuter la demande d'authentification.

17
Hannele

Un peu tard, mais pour les autres personnes qui tombent sur ce message, il est maintenant IS possible d'envoyer une autre demande à partir du Pre-request Script section. Quelques exemples peuvent être trouvés ici: https://Gist.github.com/madebysid/b57985b0649d3407a7aa9de1bd32799

15
KBusc

Comme mentionné par KBusc et inspiré de ces exemples, vous pouvez atteindre votre objectif en définissant un script de pré-requête comme suit:

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);
});

Ensuite, vous faites simplement référence à {{access_token}} comme toute autre variable d’environnement.

9
Gera Zenobi

Vous ne pouvez pas envoyer une autre demande de Pre-request Script section, mais en fait, il est possible d’enchaîner des requêtes et de les exécuter les unes après les autres.

Vous collectez votre demande dans la collecte et l'exécutez avec Collection Runner.

Pour voir les résultats de la demande, vous pouvez suivre autre réponse .

4
Piotr Dawidiuk

Vous pouvez ajouter un script de pré-requête à la collection, qui sera exécuté avant chaque requête de Postman. Par exemple, j'utilise ce qui suit pour retourner un jeton d'accès d'Apigee

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
Michael Ormrod