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