Start · Sprachen · PHP · Referenz · https://

https://

Funktion

URL-Wrapper für den Zugriff auf HTTP- und HTTPS-Ressourcen über PHP-Stream-Funktionen und Include-Mechanismen.

Kategorie: misc

Signatur

https://

Beschreibung

Der http://- und https://-Stream-Wrapper ermöglicht es, entfernte HTTP- und HTTPS-Ressourcen direkt über PHP-Datei- und Stream-Funktionen wie file_get_contents(), fopen(), copy() oder readfile() anzusprechen. Dabei wird eine HTTP/1.0-GET-Anfrage an die angegebene URL gesendet und der Antwort-Body als lesebarer Datenstrom bereitgestellt.

Der Wrapper unterstützt sowohl unverschlüsselte Verbindungen (http://) als auch TLS-verschlüsselte Verbindungen (https://). Letzteres erfordert, dass PHP mit OpenSSL-Unterstützung kompiliert wurde. Weiterleitungen (HTTP 3xx) werden standardmäßig automatisch bis zu einer konfigurierbaren Tiefe verfolgt.

Über einen Stream-Kontext (erstellt mit stream_context_create()) lassen sich HTTP-Methode, Header, Body, Timeout, Proxy-Server, SSL-Optionen und weitere Parameter anpassen. So können auch POST-Anfragen, Authentifizierungen und benutzerdefinierte Header realisiert werden.

Für komplexere Anwendungsfälle wie parallele Anfragen, Session-Verwaltung oder vollständige Kontrolle über TLS-Optionen ist eine dedizierte HTTP-Bibliothek wie cURL (über die curl_*-Funktionen) oder Guzzle vorzuziehen.

Beispiele

Einfache HTTP-GET-Anfrage mit file_get_contents

<?php
// Inhalt einer URL als String laden
$response = file_get_contents('https://www.example.com/');

if ($response === false) {
    echo 'Fehler beim Abrufen der URL.';
} else {
    echo 'Empfangene Bytes: ' . strlen($response);
}
Empfangene Bytes: 1256

HTTP-POST-Anfrage mit Stream-Kontext

<?php
$url  = 'https://httpbin.org/post';
$data = http_build_query(['name' => 'Max', 'sprache' => 'PHP']);

$context = stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => "Content-Type: application/x-www-form-urlencoded\r\n" .
                     "Content-Length: " . strlen($data) . "\r\n",
        'content' => $data,
        'timeout' => 10,
    ],
]);

$response = file_get_contents($url, false, $context);

if ($response !== false) {
    $json = json_decode($response, true);
    echo 'Gesendet: ' . print_r($json['form'] ?? [], true);
} else {
    echo 'Anfrage fehlgeschlagen.';
}
Gesendet: Array ( [name] => Max [sprache] => PHP )

Zugriff auf HTTP-Response-Header nach file_get_contents

<?php
$url      = 'https://www.example.com/';
$response = file_get_contents($url);

// $http_response_header wird nach dem Aufruf automatisch befüllt
foreach ($http_response_header as $header) {
    echo $header . PHP_EOL;
}
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 ...

// Wichtig · Fallstricke

Sicherheitshinweis: Wenn URLs dynamisch aus Benutzereingaben stammen, besteht die Gefahr von Server-Side Request Forgery (SSRF). Validiere und whiteliste erlaubte Hosts, bevor du eine URL abrufst.

Der https://-Wrapper prüft standardmäßig das SSL-Zertifikat des Servers. Das Deaktivieren der Zertifikatsprüfung ('verify_peer' => false) ist in Produktivumgebungen nicht empfehlenswert, da es Man-in-the-Middle-Angriffe ermöglicht.

Die Direktive allow_url_fopen in der php.ini muss auf On gesetzt sein, damit http://- und https://-URLs in Dateifunktionen verwendet werden können. allow_url_include (für include/require) ist aus Sicherheitsgründen standardmäßig deaktiviert und sollte es bleiben.

Der Wrapper unterstützt nur lesenden Zugriff (read); schreibende Operationen sind nicht möglich. Für komplexe Szenarien (Cookies, Redirects, Verbindungs-Pooling) empfiehlt sich die Verwendung von curl.