Magie eines Klicks: Wie wird Postman zu Curl?
\n\nJeder, der mit APIs arbeitet, kennt die Situation: Sie haben eine perfekte Anfrage in Postman konfiguriert, alles funktioniert reibungslos, und dann müssen Sie diese Anfrage an einen Kollegen weitergeben oder in ein PHP-Skript einbauen. Sie klicken auf "Code" → wählen cURL → und erhalten einen fertigen Befehl. Magie? Nein, reine Mathematik und Parsing.
\n\nAber was, wenn Sie diesen Prozess automatisieren müssen? Oder Ihren eigenen Konverter schreiben wollen, der eine JSON-Beschreibung einer Anfrage in einen ausführbaren curl-Befehl umwandelt? Heute schauen wir unter die Haube dieses Mechanismus und schreiben eine PHP-Funktion, die dasselbe tut wie Postman – nur von Hand.
Dieser Artikel ist nicht nur für Backend-Entwickler nützlich, sondern für alle, die tiefer verstehen wollen, wie HTTP-Anfragen funktionieren und wie man sie von einem Format in ein anderes umwandelt. Los geht's!
\n\nWas bedeutet "Postman to Curl" eigentlich?
\n\nWenn Sie in Postman auf die Export-Schaltfläche klicken, macht das Programm eine einfache, aber wichtige Sache: Es nimmt die strukturierte Beschreibung der Anfrage (Methode, URL, Header, Body) und übersetzt sie in die Syntax der Befehlszeile.
\n\nIm Grunde ist das eine Konvertierung einer Anfrage von einer Darstellung in eine andere. Postman speichert Anfragen in seinem internen JSON-Modell. Wenn Sie cURL auswählen, iteriert es über dieses Modell und erstellt eine Zeichenkette wie:
\n\ncurl --request POST \\\n --url https://api.example.com/data \\\n --header 'Content-Type: application/json' \\\n --data '{"key":"value"}'\n\nGenial einfach. Aber lassen Sie uns analysieren, wie das auf Code-Ebene funktioniert.
\n\nEinen eigenen Konverter in PHP erstellen
\n\nWir schreiben eine Klasse PostmanToCurl, die ein assoziatives Array mit Anfrageparametern akzeptiert und eine Zeichenkette mit dem fertigen curl-Befehl zurückgibt. Das wird unsere kleine Konvertierungs-Engine.
Schritt 1: Struktur der Eingabedaten definieren
\n\nDer Einfachheit halber legen wir fest, dass wir als Eingabe ein Array mit den Schlüsseln method, url, headers (assoziatives Array) und body (String oder Array) erhalten. Dies ist das minimale Modell, das Postman verwendet.
<?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\nSchritt 2: Die Zusammenbaufunktion schreiben
\n\nDie Hauptlogik: Methode, URL, Header und Body nehmen und zu einem Befehl zusammensetzen. Achten Sie auf das Escaping von Anführungszeichen und Sonderzeichen.
\n\nfunction generateCurlCommand(array $request): string {\n $parts = ['curl'];\n\n // 1. Methode (falls nicht 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. Header\n foreach ($request['headers'] as $key => $value) {\n $parts[] = '--header ' . escapeshellarg($key . ': ' . $value);\n }\n\n // 4. Anfrage-Body\n if (!empty($request['body'])) {\n $parts[] = '--data ' . escapeshellarg($request['body']);\n }\n\n return implode(" \\\\\\n ", $parts);\n}\n\nDie Funktion escapeshellarg ist Ihr bester Freund. Sie escapet Anführungszeichen korrekt und verhindert so, dass der Befehl beschädigt wird oder mögliche Injection-Angriffe erfolgen.
Blick unter die Haube: Was Postman wirklich tut
\n\nNachdem wir nun einen funktionierenden Code haben, lassen Sie uns analysieren, wie Postman (und unser Konverter) jedes Element der Anfrage verarbeitet.
\n\n1. HTTP-Methode
\nPostman prüft, ob sich die Methode von GET unterscheidet. Wenn ja, wird das Flag --request hinzugefügt. Warum nicht für GET? Weil cURL standardmäßig eine GET-Anfrage durchführt, wenn nichts anderes angegeben ist. Kl