POST-Anfrage in PHP senden: 4 bewährte Methoden

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: Warum PHP-Entwickler POST-Anfragen beherrschen sollten

\n\n

Stellen 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\n

Die 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\n

Nein, 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\n

Methode 1. Der Klassiker: cURL (flexibel und leistungsstark)

\n\n

cURL 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\n

Einfaches 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\n

Wichtige 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_query durch json_encode und fügen Sie den Header Content-Type: application/json hinzu.
  • \n
\n\n

Methode 2. Schnell und einfach: file_get_contents mit Kontext

\n\n

Viele 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.

\n\n

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\n

Wann 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

Blogs

Buchempfehlungen