Cómo ejecutar una solicitud desde otra usando Pre-request Script en Postman

6 minutos de lectura

avatar de usuario
Lasharela

Estoy tratando de enviar una solicitud autenticada con un clic en cartero.

Entonces, tengo una solicitud llamada “Oauth” y Estoy usando Pruebas para almacenar el token. en una variable local.

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

Lo que estoy tratando de hacer ahora es ejecutar la solicitud de Oauth automáticamente (desde un script de solicitud previa) para cualquier otra solicitud que necesite un token de portador.

¿Hay alguna manera de obtener un token de acceso y enviar una solicitud autenticada con un clic en el botón del cartero?

Como lo mencionó KBusc e inspirado en esos ejemplos, puede lograr su objetivo configurando un script de solicitud previa como el siguiente:

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

Entonces solo haces referencia {{access_token}} como cualquier otra variable de entorno.

  • ¿Cómo ejecutar una de las solicitudes desde mi espacio de trabajo, por ejemplo, solo por nombre, desde la solicitud previa de cualquier solicitud que desee?

    – Dmitri

    1 oct 2021 a las 13:27


  • No estoy seguro de entender tu pregunta, Dmitry, pero sospecho que no está estrictamente relacionada con la original y podría tener que ver con la nueva funcionalidad agregada a Postman desde entonces… ¿Quizás abrir una nueva pregunta sería más apropiado?

    – Gera Zenobi

    4 de octubre de 2021 a las 9:17

avatar de usuario
Hannele

NOTA: Ya hay es una forma de hacer esto en una secuencia de comandos previa a la solicitud, consulte las otras respuestas. Guardaré esta respuesta para la posteridad, pero solo para que todos sepan 🙂

No creo que haya una manera de hacer esto en el script de solicitud previa todavía, pero puede reducirlo a unos pocos clics si usa una variable y la pestaña Pruebas. Hay instrucciones más completas en el blog de Postman.pero la esencia de esto es:

  1. Configure su solicitud de autenticación como de costumbre.
  2. En la sección Pruebas de esa solicitud, almacene el resultado de esa solicitud en una variable, posiblemente algo como lo siguiente:

    var data = JSON.parse(responseBody);
    postman.setEnvironmentVariable("token", data.token);
    
  3. Ejecute la solicitud de autenticación; ahora debería ver eso token está configurado para ese entorno (haga clic en el icono con forma de ojo en la parte superior derecha).

  4. Configura tu solicitud de datos para usar {{token}} dondequiera que haya estado pegando previamente el token del portador.
  5. Ejecute su solicitud de datos; ahora debería autenticarse correctamente.

Para actualizar el token, todo lo que debe hacer es volver a ejecutar la solicitud de autenticación.

  • Me doy cuenta de que esto es lo que estaba haciendo la pregunta en primer lugar, pero es fácil buscar el título sin saberlo XD

    – Hannele

    26 de marzo de 2018 a las 21:54

  • Gracias por configurar mi mente de la manera correcta) Hoy en día obtendrás Identifier 'data' has already been declared ejecutándose por encima del código. Para arreglarlo solo necesitamos cambiar el nombre de la variable data -> body

    – apreciador de frío

    13 oct 2020 a las 9:39

avatar de usuario
KBusc

Un poco tarde, pero para otros que se encuentran con esta publicación, ahora ES posible enviar otra solicitud desde el Pre-request Script sección. Aquí se pueden encontrar algunos ejemplos: https://gist.github.com/sid405/b57985b0649d3407a7aa9de1bd327990

  • el enlace esencial está muerto

    – Calicodificador

    9 de marzo a las 23:07

  • El enlace @Calicoder está arreglado

    – KBusc

    24 de junio a las 11:28

  • ¿Podría proporcionar algún contexto/descripción del contenido del enlace, según las pautas de stackoverflow?

    – Azul Inmortal

    21 de julio a las 14:50

  • ¿Puede proporcionar la respuesta aquí? No puedo encontrar en la página o en las páginas de problemas vinculados. Si la respuesta es la función de ‘ejecución de recolección’, no es exactamente lo mismo y no es tan fácil de usar como la función de solicitud.

    – Kaigo

    28 de julio a las 11:41


avatar de usuario
Piotr Dawidiuk

No puede enviar otra solicitud desde Pre-request Script sección, pero de hecho, es posible encadenar solicitudes y ejecutarlas una tras otra.

Usted recoge su solicitud en colección y ejecutarlo con Collection Runner.

Para ver los resultados de la solicitud, puede seguir otra respuesta.

La misma pregunta estaba en mi mente, que es básicamente “¿cómo puedo ejecutar otra solicitud que ya existe desde las pestañas de script de prueba o solicitud previa de otra solicitud sin crear esa solicitud con pm.sendRequest(reqConfObj)?”, entonces encontré el postman.setNextRequest('requestName') método de esta discusión del cartero que te va a llevar a esta página de documentación del cartero sobre la creación de flujos de trabajo de solicitud.

Pero la cosa es, postman.setNextRequest() El método no se ejecutará si no está ejecutando una carpeta o una colección, por lo que simplemente presionar el botón ‘Enviar’ de la solicitud que tiene su secuencia de comandos no funcionará.

También me gustaría llamar su atención sobre algunas cosas:

  • La palabra antepuesta es ‘cartero’ en lugar de ‘pm’.
  • postman.setNextRequest() siempre se ejecutará en último lugar, aunque lo haya escrito en la parte superior de su secuencia de comandos. Su otro código en el script se ejecutará y luego postman.setNextRequest se inicializará.
  • Si desea detener el flujo de solicitudes, simplemente puede postman.setNextRequest(null).

Animaría a todos los que usan Postman a revisar los enlaces que se mencionaron, ¡creo que es una gran función que todos deberían probar! 🙂

avatar de usuario
w4dd325

Puede agregar un script de solicitud previa a la colección que se ejecutará antes de cada solicitud de Postman. Por ejemplo, uso lo siguiente para devolver un token de acceso de 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)
    }
  });
}

avatar de usuario
w4dd325

Todas estas soluciones alternativas con la recreación de solicitudes. El cartero no admite lo que quieres hacer. Para obtener lo que desea, debe usar Insomnia, le permite mapear los valores del cuerpo de otras respuestas de solicitud y, si esas respuestas no se ejecutan nunca, las ejecuta automáticamente o se comporta según la política elegida.

Pero si desea seguir con Postman, tendrá que guardar los parámetros de solicitud anteriores completos en variables globales, luego recuperar toda la configuración de solicitudes anteriores de esa variable como una cadena JSON, analizar ese JSON en un objeto y asignarlo a pm .sendRequest como primer argumento.

  • Gracias, esta era la claridad que necesitaba. Para ser claros, muchas de estas otras respuestas le dicen cómo recrear una solicitud existente dentro de un Script de solicitud previa, pero eso no es lo mismo que poder llamar a una solicitud ya existente (en su Colección).

    – no se nada

    3 ago a las 16:17

¿Ha sido útil esta solución?