Conversão de Postman para Curl em PHP: anatomia do processo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

A mágica de um clique: como o Postman se transforma em Curl?

\n\n

Quem já trabalhou com API conhece esta situação: você configura a requisição perfeita no Postman, tudo funciona como um relógio, e então precisa passar essa requisição para um colega ou incorporá-la em um script PHP. Você clica em "Code" → seleciona cURL → e pronto, recebe o comando pronto. Mágica? Não, é pura matemática e parsing.

\n\n

Mas e se você precisar automatizar esse processo? Ou criar seu próprio conversor que transforme uma descrição JSON da requisição em um comando curl executável? Hoje vamos mergulhar nos bastidores desse mecanismo e escrever uma função em PHP que faz exatamente o que o Postman faz — só que com as próprias mãos.

\n\n

Este conteúdo será útil não apenas para desenvolvedores backend, mas para todos que desejam entender melhor como funcionam as requisições HTTP e como convertê-las de um formato para outro. Vamos nessa!

\n\n

O que é "Postman to Curl" na prática?

\n\n

Quando você clica no botão de exportação no Postman, o programa faz algo simples, porém importante: ele pega a descrição estruturada da requisição (método, URL, cabeçalhos, corpo) e a traduz para a sintaxe da linha de comando.

\n\n

Basicamente, é uma conversão de requisição de uma representação para outra. O Postman armazena as requisições em seu modelo JSON interno. Quando você seleciona cURL, ele itera sobre esse modelo e monta uma string como esta:

\n\n
curl --request POST \\\n  --url https://api.example.com/data \\\n  --header 'Content-Type: application/json' \\\n  --data '{"key":"value"}'
\n\n

Tudo que é genial é simples. Mas vamos analisar como isso funciona no nível do código.

\n\n

Criando seu próprio conversor em PHP

\n\n

Vamos escrever a classe PostmanToCurl, que recebe um array associativo com os parâmetros da requisição e retorna uma string com o comando curl pronto. Este será nosso mini-motor de conversão.

\n\n

Passo 1: Definindo a estrutura dos dados de entrada

\n\n

Para simplificar, vamos combinar que a entrada será um array com as chaves: method, url, headers (array associativo), body (string ou array). Este é o modelo mínimo que o Postman utiliza.

\n\n
<?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' => 'João', 'email' => 'joao@example.com'])\n];
\n\n

Passo 2: Escrevendo a função de montagem

\n\n

A lógica principal: pegar o método, URL, cabeçalhos e corpo — e juntá-los em um comando. Preste atenção ao escape de aspas e caracteres especiais.

\n\n
function generateCurlCommand(array $request): string {\n    $parts = ['curl'];\n\n    // 1. Método (se não for 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. Cabeçalhos\n    foreach ($request['headers'] as $key => $value) {\n        $parts[] = '--header ' . escapeshellarg($key . ': ' . $value);\n    }\n\n    // 4. Corpo da requisição\n    if (!empty($request['body'])) {\n        $parts[] = '--data ' . escapeshellarg($request['body']);\n    }\n\n    return implode(" \\\\\\n  ", $parts);\n}
\n\n

A função escapeshellarg é sua melhor amiga. Ela escapa corretamente as aspas, evitando quebra do comando e possíveis injeções.

\n\n

Análise dos bastidores: o que o Postman realmente faz

\n\n

Agora que temos um código funcional, vamos analisar como exatamente o Postman (e nosso conversor) processa cada elemento da requisição.

\n\n

1. Método HTTP

\n

O Postman verifica se o método é diferente de GET. Se sim, adiciona a flag --request. Por que não para GET? Porque o cURL faz uma requisição GET por padrão, a menos que especificado de outra forma. Inteligente, não?

Blogs

Book Recommendations