Signatur
Beschreibung
EventHttpRequest ist Bestandteil der Event-PECL-Erweiterung und kapselt eine eingehende oder ausgehende HTTP-Anfrage. Sie wird typischerweise in Callback-Funktionen eines EventHttp-Servers oder beim Versenden von Anfragen über EventHttpConnection verwendet.
Über Objekte dieser Klasse lassen sich alle wesentlichen Bestandteile einer HTTP-Anfrage lesen und schreiben: Methode, URI, Header, Body sowie der zugehörige Antwort-Buffer. Außerdem kann die HTTP-Antwort direkt über EventHttpRequest::sendReply() und verwandte Methoden zurückgesendet werden.
Ein typischer Einsatz besteht darin, im Request-Callback des HTTP-Servers die Anfrage auszuwerten (z. B. Methode und URI prüfen), eine Antwort zusammenzusetzen und diese asynchron an den Client zu senden. Die Klasse integriert sich nahtlos in die Event-Loop von EventBase.
Die Klasse bietet Klassenkonstanten für HTTP-Methoden (EventHttpRequest::CMD_GET, CMD_POST usw.) sowie für übliche HTTP-Statuswerte.
Beispiele
Einfacher asynchroner HTTP-Server mit EventHttpRequest
<?php
$base = new EventBase();
$http = new EventHttp($base);
// Standard-Callback für alle eingehenden Anfragen
$http->setDefaultCallback(function (EventHttpRequest $req) {
$method = $req->getCommand(); // z. B. EventHttpRequest::CMD_GET
$uri = $req->getUri();
// Ausgehenden Buffer befüllen
$buf = $req->getOutputBuffer();
$buf->add("<html><body>Hallo! URI: " . htmlspecialchars($uri) . "</body></html>");
// HTTP-Antwort senden
$req->sendReply(200, "OK");
});
$http->bind("0.0.0.0", 8080);
echo "HTTP-Server läuft auf Port 8080 ...\n";
$base->loop();
HTTP-Methode prüfen und Header auslesen
<?php
$base = new EventBase();
$http = new EventHttp($base);
$http->setDefaultCallback(function (EventHttpRequest $req) {
// Nur GET-Anfragen erlauben
if ($req->getCommand() !== EventHttpRequest::CMD_GET) {
$req->sendError(405, "Method Not Allowed");
return;
}
// Request-Header auslesen
$headers = $req->getInputHeaders();
$userAgent = $headers['User-Agent'] ?? 'unbekannt';
$buf = $req->getOutputBuffer();
$buf->add("User-Agent: " . htmlspecialchars($userAgent));
$req->sendReply(200, "OK");
});
$http->bind("127.0.0.1", 8081);
$base->loop();
// Wichtig · Fallstricke
Sicherheit: Alle vom Client gesendeten Daten (URI, Header, Body) sind als nicht vertrauenswürdig zu behandeln. Vor der Ausgabe oder Weiterverarbeitung müssen Werte wie die URI stets mit htmlspecialchars() oder äquivalenten Mitteln bereinigt werden, um XSS zu verhindern.
Verfügbarkeit: EventHttpRequest setzt die PECL-Erweiterung event (>= 1.5.0) sowie die C-Bibliothek libevent2 voraus. Sie ist nicht Teil der PHP-Standardinstallation.
Lebensdauer: Das EventHttpRequest-Objekt darf innerhalb des Callbacks nicht über EventHttpRequest::sendReply() oder EventHttpRequest::cancel() hinaus referenziert werden, da libevent den zugrunde liegenden Speicher danach freigibt.