La magie d'un clic : comment Postman se transforme en Curl ?
\n\nChaque développeur qui travaille avec des API connaît cette situation : vous avez configuré la requête parfaite dans Postman, tout fonctionne comme sur des roulettes, et vous devez maintenant transmettre cette requête à un collègue ou l'intégrer dans un script PHP. Vous cliquez sur "Code" → vous sélectionnez cURL → et vous obtenez une commande prête à l'emploi. De la magie ? Non, juste des maths et du parsing.
\n\nMais que faire si vous devez automatiser ce processus ? Ou écrire votre propre convertisseur qui transforme à la volée une description JSON de requête en une commande curl exécutable ? Aujourd'hui, nous allons explorer les coulisses de ce mécanisme et écrire une fonction PHP qui fait exactement la même chose que Postman — mais en partant de zéro.
Ce contenu sera utile non seulement aux développeurs backend, mais aussi à tous ceux qui souhaitent comprendre plus en profondeur comment fonctionnent les requêtes HTTP et comment les convertir d'un format à un autre. C'est parti !
\n\nQu'est-ce que "Postman to Curl" concrètement ?
\n\nLorsque vous cliquez sur le bouton d'exportation dans Postman, le programme effectue une opération simple mais cruciale : il prend une description structurée de la requête (méthode, URL, en-têtes, corps) et la traduit en syntaxe de ligne de commande.
\n\nEn substance, il s'agit d'une transformation de requête d'une représentation à une autre. Postman stocke les requêtes dans son modèle JSON interne. Lorsque vous sélectionnez cURL, il parcourt ce modèle et assemble une chaîne de caractères comme celle-ci :
\n\ncurl --request POST \\\n --url https://api.example.com/data \\\n --header 'Content-Type: application/json' \\\n --data '{"key":"value"}'\n\nTout ce qui est génial est simple. Mais voyons comment cela fonctionne au niveau du code.
\n\nCréer votre propre convertisseur en PHP
\n\nNous allons écrire une classe PostmanToCurl qui prend un tableau associatif avec les paramètres de la requête et retourne une chaîne contenant la commande curl prête à l'emploi. Ce sera notre mini-moteur de conversion.
Étape 1. Définir la structure des données d'entrée
\n\nPour simplifier, convenons qu'en entrée nous recevons un tableau avec les clés : method, url, headers (tableau associatif), body (chaîne ou tableau). C'est le modèle minimal utilisé par Postman.
<?php\n\n$request = [\n 'method' => 'POST',\n 'url' => 'https://api.example.com/users',\n 'headers' => [\n 'Content-Type' => 'application/json',\n 'Authorization' => 'Bearer token123'\n ],\n 'body' => json_encode(['name' => 'John', 'email' => 'john@example.com'])\n];\n\nÉtape 2. Écrire la fonction d'assemblage
\n\nLa logique principale : prendre la méthode, l'URL, les en-têtes, le corps — et les assembler en une commande. Faites attention à l'échappement des guillemets et des caractères spéciaux.
\n\nfunction generateCurlCommand(array $request): string {\n $parts = ['curl'];\n\n // 1. Méthode (si ce n'est pas GET)\n if (strtoupper($request['method']) !== 'GET') {\n $parts[] = '--request ' . strtoupper($request['method']);\n }\n\n // 2. URL\n $parts[] = '--url ' . escapeshellarg($request['url']);\n\n // 3. En-têtes\n foreach ($request['headers'] as $key => $value) {\n $parts[] = '--header ' . escapeshellarg($key . ': ' . $value);\n }\n\n // 4. Corps de la requête\n if (!empty($request['body'])) {\n $parts[] = '--data ' . escapeshellarg($request['body']);\n }\n\n return implode(" \\\\\\n ", $parts);\n}\n\nLa fonction escapeshellarg est votre meilleure amie. Elle échappe correctement les guillemets, évitant ainsi de casser la commande et les éventuelles injections.
Analyse sous le capot : ce que fait réellement Postman
\n\nMaintenant que nous avons un code fonctionnel, voyons exactement comment Postman (et notre convertisseur) traite chaque élément de la requête.
\n\n1. Méthode HTTP
\nPostman vérifie si la méthode est différente de GET. Si c'est le cas, il ajoute le flag --request. Pourquoi pas pour GET ? Parce que cURL effectue par défaut une requête GET si rien d'autre n'est spécifié. Intel