Einleitung: Warum PHP-Entwickler POST-Anfragen beherrschen sollten
\n\nStellen Sie sich vor: Sie entwickeln eine Website mit PHP und müssen Daten an einen anderen Server senden. Zum Beispiel einen Benutzer über eine externe API registrieren, ein Formular an ein CRM-System übermitteln oder Ihren eigenen POST-Handler testen. Das ist eine klassische Aufgabe, die jeder Webentwickler früher oder später lösen muss.
\n\nDie Frage "How do I send a POST request with PHP?" auf Stack Overflow wurde bereits hunderttausende Male aufgerufen. Kein Wunder: Obwohl PHP eine mächtige Sprache ist, sind Anfänger oft unsicher, welche Methode die richtige ist. Muss das wirklich so kompliziert sein?
\n\nNein, muss es nicht. Es gibt sogar vier verschiedene Wege. In diesem Artikel stellen wir Ihnen jede Methode vor, zeigen praxisnahe PHP-Code-Beispiele, vergleichen die Performance und geben Empfehlungen, wann Sie welche Methode einsetzen sollten. Nach der Lektüre werden Sie POST-Anfragen in jedem Projekt souverän meistern.
\n\nMethode 1. Der Klassiker: cURL (flexibel und leistungsstark)
\n\ncURL ist eine Bibliothek, die auf fast allen Hosting-Umgebungen verfügbar ist. Sie unterstützt HTTPS, Cookies, Header, Timeouts und vieles mehr. Wenn Sie eine POST-Anfrage mit maximaler Kontrolle senden möchten, ist cURL die richtige Wahl.
\n\nEinfaches Beispiel: Formular mit name- und email-Feldern senden
\n\n<?php\n$url = 'https://api.example.com/submit';\n$data = [\n 'name' => 'Max Mustermann',\n 'email' => 'max@example.com'\n];\n\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));\n// Für JSON-Daten:\n// curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));\n// curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);\n\n$response = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\nif ($httpCode === 200) {\n echo "Erfolg! Serverantwort: " . $response;\n} else {\n echo "Fehler. HTTP-Status: " . $httpCode;\n}\n?>\n\nWichtige cURL-Details:
\n- \n
- http_build_query() wandelt ein Array in einen Query-String um, z. B.
name=Max&email=max@example.com. Das ist das Standardformat für Formulare. \n - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) sorgt dafür, dass das Ergebnis in einer Variable gespeichert und nicht direkt ausgegeben wird. \n
- Prüfen Sie immer den HTTP-Statuscode (200 = Erfolg, 4xx/5xx = Fehler). \n
- Für JSON-Anfragen: Ersetzen Sie
http_build_querydurchjson_encodeund fügen Sie den HeaderContent-Type: application/jsonhinzu. \n
Methode 2. Schnell und einfach: file_get_contents mit Kontext
\n\nViele kennen file_get_contents() nur zum Lesen von Dateien. Aber mit Stream Context kann die Funktion auch POST-Anfragen senden. Eine ideale Lösung für einfache Aufgaben, wenn Sie keine externen Bibliotheken einbinden möchten.
Beispiel: POST-Anfrage mit file_get_contents
\n\n<?php\n$url = 'https://api.example.com/submit';\n$data = [\n 'name' => 'Max Mustermann',\n 'email' => 'max@example.com'\n];\n\n$options = [\n 'http' => [\n 'header' => "Content-Type: application/x-www-form-urlencoded\\r\\n",\n 'method' => 'POST',\n 'content' => http_build_query($data)\n ]\n];\n$context = stream_context_create($options);\n$result = file_get_contents($url, false, $context);\n\nif ($result === false) {\n echo "Fehler beim Senden der Anfrage";\n} else {\n echo "Serverantwort: " . $result;\n}\n?>\n\nWann ist diese Methode sinnvoll?
\n- \n
- Wenn Sie schnell Daten senden möchten, ohne viel Code zu schreiben. \n
- Wenn Sie cURL vermeiden wollen. \n
- Nachteil: Fehlerbehandlung ist umständlich (kein direkter Zugriff auf den HTTP-Statuscode). \n