HTTP-Client in PHP: Anfragen richtig stellen

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



In der modernen PHP-Webentwicklung kommt kaum ein Projekt ohne das Senden von HTTP-Anfragen aus. Ob es sich um die Integration mit einer externen API, das Abrufen von Daten von einem entfernten Server, das Senden von Formularen oder die Überprüfung der Verfügbarkeit von Ressourcen handelt – die Fähigkeit, kompetent mit HTTP-Clients zu arbeiten, ist eine unverzichtbare Fähigkeit für jeden PHP-Entwickler.



In diesem Artikel betrachten wir drei grundlegende Methoden zur Erstellung eines HTTP-Clients in PHP: die eingebauten Funktionen file_get_contents und cURL sowie die beliebte Bibliothek Guzzle. Sie erfahren, wie Sie GET- und POST-Anfragen korrekt senden, Fehler behandeln, mit Headern und Timeouts arbeiten. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich, die ihr Wissen systematisieren möchten.



1. Die einfachste Methode: file_get_contents



Der schnellste Weg, eine GET-Anfrage in PHP zu senden, ist die Verwendung der Funktion file_get_contents() mit Angabe einer URL. Diese Methode hat jedoch erhebliche Einschränkungen.



Einfache GET-Anfrage



<?php$url = 'https://api.example.com/users';$response = file_get_contents($url);if ($response === false) {    echo 'Fehler beim Abrufen der Daten';} else {    echo $response;}?>


Hinzufügen von Headern über stream context



Um Header hinzuzufügen oder die Anfragemethode zu ändern, muss stream_context_create() verwendet werden:



<?php$url = 'https://api.example.com/data';$options = [    'http' => [        'method' => 'GET',        'header' => "Accept: application/json\\r" .                     "Authorization: Bearer your-token\\r"    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);if ($response === false) {    echo 'Anfragefehler';} else {    $data = json_decode($response, true);    print_r($data);}?>


POST-Anfrage über file_get_contents



<?php$url = 'https://api.example.com/create';$data = ['name' => 'John', 'email' => 'john@example.com'];$options = [    'http' => [        'method' => 'POST',        'header' => "Content-Type: application/json\\r",        'content' => json_encode($data)    ]];$context = stream_context_create($options);$response = file_get_contents($url, false, $context);?>


Nachteile von file_get_contents:

  • Keine Unterstützung für Timeouts (wartet standardmäßig unbegrenzt)
  • Schwierige Fehlerbehandlung bei Verbindungsproblemen
  • Keine Möglichkeit, Dateien in Teilen herunterzuladen
  • Schlecht geeignet für komplexe Szenarien


2. Leistungsstarkes Werkzeug: cURL



cURL ist das Standardwerkzeug für die Arbeit mit HTTP in PHP. Es bietet vollständige Kontrolle über Anfragen und unterstützt praktisch alle Funktionen des Protokolls.



Basisinitialisierung und GET-Anfrage



<?php$ch = curl_init('https://api.example.com/users');curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);$response = curl_exec($ch);if (curl_errno($ch)) {    echo 'cURL-Fehler: ' . curl_error($ch);} else {    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);    echo "HTTP-Code: $httpCode";    echo $response;}curl_close($ch);?>


POST-Anfrage mit Daten



<?php$ch = curl_init('https://api.example.com/users');curl_setopt_array($ch, [    CURLOPT_RETURNTRANSFER => true,    CURLOPT_POST => true,    CURLOPT_POSTFIELDS => json_encode([        'name' => 'Jane Doe',        'email' => 'jane@example.com'    ]),    CURLOPT_HTTPHEADER => [        'Content-Type: application/json',        'Accept: application/json'    ],    CURLOPT_TIMEOUT => 30,    CURLOPT_CONNECTTIMEOUT => 10]);$response = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);                

Blogs

Buchempfehlungen