Start · Sprachen · PHP · Referenz · Swoole\Http\Request

Swoole\Http\Request

Klasse

Repräsentiert eine eingehende HTTP-Anfrage im Swoole-HTTP-Server und stellt Zugriff auf Header, Body, Cookies und Upload-Dateien bereit.

seit PHP 1.9.0 Kategorie: misc

Signatur

class Swoole\Http\Request

Beschreibung

Swoole\Http\Request ist ein Objekt, das automatisch vom Swoole-HTTP-Server bei jeder eingehenden Anfrage erzeugt wird. Es wird als erstes Argument im onRequest-Callback übergeben und enthält alle Informationen der HTTP-Anfrage – ähnlich wie Phps Superglobale $_GET, $_POST, $_COOKIE, $_FILES und $_SERVER, jedoch objektorientiert und innerhalb des Coroutine-Kontexts von Swoole.

Die Klasse stellt öffentliche Eigenschaften wie $header, $server, $get, $post, $cookie und $files bereit, über die der Entwickler ohne globale Zustandsverwaltung auf Anfragedaten zugreift. Zusätzlich bietet sie Methoden wie rawContent() zum Lesen des rohen Request-Bodys und getData() für vollständige HTTP-Rohdaten.

Da Swoole ein persistenter Prozess ist, dürfen Request-Objekte nicht in globalen Variablen oder statischen Eigenschaften gespeichert werden. Das Objekt ist nur für die Lebensdauer des aktuellen onRequest-Callbacks gültig. Nach Abschluss des Callbacks wird es vom Swoole-Framework automatisch freigegeben.

Die Klasse eignet sich für den Bau von hochperformanten, asynchronen Web-APIs und Microservices, bei denen der Overhead eines klassischen PHP-FPM-Zyklus vermieden werden soll.

Beispiele

Einfacher HTTP-Server mit Request-Auswertung

<?php
$http = new Swoole\Http\Server('0.0.0.0', 9501);

$http->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    // HTTP-Methode und Pfad auslesen
    $method = $request->server['request_method'];
    $uri    = $request->server['request_uri'];

    // Query-Parameter (entspricht $_GET)
    $name = $request->get['name'] ?? 'Welt';

    // Header auslesen
    $userAgent = $request->header['user-agent'] ?? 'unbekannt';

    $response->header('Content-Type', 'text/plain; charset=utf-8');
    $response->end("Methode: {$method}\nPfad: {$uri}\nHallo, {$name}!\nUA: {$userAgent}");
});

$http->start();

POST-Body und Datei-Upload verarbeiten

<?php
$http = new Swoole\Http\Server('0.0.0.0', 9502);

$http->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    // POST-Felder (entspricht $_POST bei application/x-www-form-urlencoded)
    $username = $request->post['username'] ?? '';

    // Rohen Request-Body lesen (z. B. für JSON-APIs)
    $rawBody = $request->rawContent();
    $payload = json_decode($rawBody, true);

    // Datei-Upload (entspricht $_FILES)
    if (!empty($request->files['avatar'])) {
        $file = $request->files['avatar'];
        $tmpPath = $file['tmp_name'];
        $origName = $file['name'];
        move_uploaded_file($tmpPath, '/uploads/' . basename($origName));
    }

    // Cookie auslesen
    $sessionId = $request->cookie['PHPSESSID'] ?? null;

    $response->header('Content-Type', 'application/json');
    $response->end(json_encode([
        'user'    => $username,
        'payload' => $payload,
        'session' => $sessionId,
    ]));
});

$http->start();

Vollständige HTTP-Rohdaten der Anfrage lesen

<?php
$http = new Swoole\Http\Server('0.0.0.0', 9503);

$http->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    // Gibt die kompletten HTTP-Rohdaten zurück (Anfrage-Header + Body)
    $raw = $request->getData();

    $response->header('Content-Type', 'text/plain');
    $response->end($raw);
});

$http->start();

// Wichtig · Fallstricke

Kein globaler Zustand: Das Request-Objekt darf niemals in statischen Variablen, globalen Arrays oder Singletons zwischengespeichert werden, da Swoole-Prozesse persistent sind. Jeder Coroutine-Kontext erhält sein eigenes Objekt.

Sicherheit: Alle Eingaben aus $request->get, $request->post und $request->cookie sind rohes Benutzereingaben und müssen vor Verwendung validiert und bereinigt werden, um XSS, SQL-Injection und andere Angriffe zu verhindern.

Content-Type beachten: $request->post wird nur bei application/x-www-form-urlencoded oder multipart/form-data befüllt. Bei JSON-Payloads muss $request->rawContent() in Verbindung mit json_decode() verwendet werden.

Verfügbarkeit: Die Klasse ist nur verfügbar, wenn die Swoole-Erweiterung installiert ist (pecl install swoole). Sie ist nicht Teil der PHP-Standardbibliothek.