QHttpServer Class

QHttpServer ist eine vereinfachte API für QAbstractHttpServer und QHttpServerRouter. Mehr...

Kopfzeile: #include <QHttpServer>
CMake: find_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)
qmake: QT += httpserver
Seit: Qt 6.4
Erbt: QAbstractHttpServer

Öffentliche Funktionen

QHttpServer(QObject *parent = nullptr)
virtual ~QHttpServer() override
void addAfterRequestHandler(const QObject *receiver, Functor &&slot)
void clearMissingHandler()
Rule *route(const QString &pathPattern, QHttpServerRequest::Methods method, const QObject *receiver, Functor &&slot)
Rule *route(const QString &pathPattern, Functor &&handler)
Rule *route(const QString &pathPattern, QHttpServerRequest::Methods method, Functor &&handler)
Rule *route(const QString &pathPattern, const QObject *receiver, Functor &&slot)
QHttpServerRouter *router()
const QHttpServerRouter *router() const
void setMissingHandler(const QObject *receiver, Functor &&slot)

Detaillierte Beschreibung

QHttpServer ermöglicht es, einen einfachen Http-Server zu erstellen, indem eine Reihe von Request-Handlern festgelegt wird.

Die Funktion route kann verwendet werden, um auf bequeme Weise Regeln zum Server QHttpServerRouter hinzuzufügen. Um einen Handler zu registrieren, der nach jeder Anfrage aufgerufen wird, verwenden Sie addAfterRequestHandler und um einen Handler für alle unbehandelten Anfragen zu registrieren, verwenden Sie setMissingHandler.

Minimales Beispiel:

QHttpServer server; server.route("/", [] () { return "hello world"; });auto tcpserver = new QTcpServer();if (!tcpserver->listen() || !server.bind(tcpserver.get())) { delete tcpserver; return-1;}
qDebug() << "Listening on port" << tcpserver->serverPort();

Dokumentation der Mitgliederfunktionen

[explicit] QHttpServer::QHttpServer(QObject *parent = nullptr)

Erzeugt eine Instanz von QHttpServer mit übergeordnetem parent.

[override virtual noexcept] QHttpServer::~QHttpServer()

Zerstört eine QHttpServer.

template <typename Functor> void QHttpServer::addAfterRequestHandler(const QObject *receiver, Functor &&slot)

Registrieren Sie receiver und slot, die nach jeder Bearbeitung einer Anfrage aufgerufen werden.

Die slot muss die Signatur void (*)(const QHttpServerRequest &, QHttpServerResponse &) implementieren.

Die slot kann auch ein Funktionszeiger, ein nicht veränderbares Lambda oder eine andere kopierbare aufrufbare Variable mit dem Operator const call sein. In diesem Fall ist receiver ein Kontextobjekt und der Handler ist gültig, bis das Kontextobjekt zerstört wird.

Beispiel:

QHttpServer server;
server.addAfterRequestHandler(&server, [] (const QHttpServerRequest &req, QHttpServerResponse &resp) {
    resp.write(req.body(), "text/plain"_ba);
}

Hinweis: Diese Handler werden nicht für Anfragen aufgerufen, die von Handlern mit dem Argument QHttpServerResponder& verarbeitet werden.

void QHttpServer::clearMissingHandler()

Setzt den Handler auf den Standard-Handler zurück, der Antworten mit dem Status 404 Not Found erzeugt.

template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, QHttpServerRequest::Methods method, const QObject *receiver, Functor &&slot)

Dies ist eine bequeme Methode zum Hinzufügen einer neuen Rule zum QHttpServerRouter des Servers. Der Parameter der Regelvorlage kann eine beliebige benutzerdefinierte Klasse sein, die von QHttpServerRouterRule abgeleitet ist.

Diese Funktion nimmt eine pathPattern und eine method, die eine Reihe von Anfragen darstellen, und erstellt eine neue QHttpServerRouterRule (oder eine benutzerdefinierte Regel, falls in den Vorlagenparametern angegeben), die alle entsprechenden Anfragen an die bereitgestellten receiver und slot weiterleitet. Die Regel wird zu router hinzugefügt. Einzelheiten zu gültigen Mustern in pathPattern finden Sie in der Dokumentation QHttpServerRouterRule.

slot kann ein Zeiger auf eine Mitgliedsfunktion von receiver sein. Es kann auch ein Funktionszeiger, ein nicht-mutierbares Lambda oder jede andere kopierbare aufrufbare Funktion mit const call Operator sein. In diesem Fall muss receiver ein QObject -Zeiger sein. Die Regel ist für die Lebensdauer des receiver gültig. Der Empfänger muss dieselbe Thread-Affinität wie der QHttpServer haben, damit die Registrierung erfolgreich ist und die Regel ausgeführt werden kann.

Der Slot kann seine Antwort mit einer Return-Anweisung ausdrücken. Die Funktion muss QHttpServerResponse oder einen beliebigen Typ zurückgeben, der in QHttpServerResponse konvertiert werden kann. Es steht eine große Anzahl von Konvertierungskonstruktoren zur Verfügung, siehe QHttpServerResponse.

QHttpServer server;
server.route("/test", this, [] () { return ""; });

Alternativ kann ein optionales letztes Funktionsargument QHttpServerResponder& angegeben werden, auf das die Antwort geschrieben werden muss. Wird die Antwort auf ein QHttpServerResponder& geschrieben, muss die Funktion void zurückgeben.

server.route("/test2", this, [] (QHttpServerResponder &responder) {
                                responder.write(QHttpServerResponder::StatusCode::Forbidden); });

Der Slot kann außerdem einen const QHttpServerRequest& als vorletzten Parameter haben, um detaillierte Informationen über die Anfrage zu erhalten.

server.route("/test3", this, [] (const QHttpServerRequest &request,
                                QHttpServerResponder &responder) {
                                responder.write(req.body(), "text/plain"_ba);});

Schließlich kann der Rückruf eine beliebige Anzahl von kopierbaren Parametern enthalten, die bei QHttpServerRouter::converters registriert sind. Standardmäßig sind dies die meisten Integer-Typen, Float, Double, QString, QByteArray und QUrl. Zusätzliche Konverter können registriert werden, siehe QHttpServerRouter::addConverter. Diese Parameter müssen einen entsprechenden Platzhalter in der pathPattern haben. Einzelheiten zu Platzhaltern und pathPattern finden Sie unter QHttpServerRouterRule.

QHttpServer server;
server.route("/test/<arg>", this, [] (const int page) { return ""; });

Diese Funktion gibt im Erfolgsfall einen Zeiger auf die neu erstellte Regel zurück, andernfalls einen nullptr. Der Zeiger kann zum Setzen von Parametern für jede benutzerdefinierte QHttpServerRouter Klasse verwendet werden:

auto rule = server.route<MyRule>("/test", this, [] () {return "";});
rule->setParameter("test");

. Diese Funktion darf nicht von einem Route Callback aufgerufen werden.

Hinweis: Wenn eine Anfrage von einem Handler verarbeitet wurde, der QHttpServerResponder& als Argument akzeptiert, wird keiner der nachfolgenden Request-Handler (siehe addAfterRequestHandler) aufgerufen.

Standardmäßig werden Anfragen sequentiell innerhalb des Threads von QHttpServer verarbeitet. Der Request-Handler kann QFuture<QHttpServerResponse> zurückgeben, wenn eine asynchrone Verarbeitung gewünscht ist:

server.route("/feature/", [] (int id) {
    return QtConcurrent::run([] () {
        return QHttpServerResponse("the future is coming");
    });
});

Der Körper von QFuture wird asynchron ausgeführt, aber die gesamte Netzwerkkommunikation wird sequentiell in dem Thread ausgeführt, zu dem QHttpServer gehört. Das spezielle Argument QHttpServerResponder& ist für Routen, die ein QFuture zurückgeben, nicht verfügbar.

Siehe auch QHttpServerRouter::addRule und addAfterRequestHandler.

template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, Functor &&handler)

Dies ist eine überladene Funktion.

Überladung von QHttpServer::route zur Erstellung einer Regel für pathPattern und QHttpServerRequest::Method::AnyKnown. Alle Anfragen werden an handler weitergeleitet, das ein Funktionszeiger, ein nicht-mutierbares Lambda oder eine andere kopierbare aufrufbare Funktion mit const call Operator sein kann. Die Regel ist so lange gültig, bis die QHttpServer zerstört wird.

template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, QHttpServerRequest::Methods method, Functor &&handler)

Dies ist eine überladene Funktion.

Überladung von QHttpServer::route zur Erstellung einer Regel für pathPattern und method. Alle Anfragen werden an handler weitergeleitet, das ein Funktionszeiger, ein nicht-mutierbares Lambda oder eine andere kopierbare aufrufbare Funktion mit const call Operator sein kann. Die Regel ist so lange gültig, bis die QHttpServer zerstört wird.

template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, const QObject *receiver, Functor &&slot)

Dies ist eine überladene Funktion.

Überladung von QHttpServer::route, um eine Regel für pathPattern und QHttpServerRequest::Method::AnyKnown zu erstellen. Alle Anfragen werden an receiver und slot weitergeleitet.

QHttpServerRouter *QHttpServer::router()

Gibt einen Zeiger auf das Router-Objekt zurück.

const QHttpServerRouter *QHttpServer::router() const

Gibt einen Zeiger auf das konstante Router-Objekt zurück.

template <typename Functor> void QHttpServer::setMissingHandler(const QObject *receiver, Functor &&slot)

Legen Sie einen Handler für unbehandelte Anfragen fest.

Alle unbehandelten Anfragen werden an den receiver's slot weitergeleitet.

Die slot muss die Signatur void (*)(const QHttpServerRequest &, QHttpServerResponder &) implementieren. Die slot kann auch ein Funktionszeiger, ein nicht veränderbares Lambda oder eine andere kopierbare aufrufbare Variable mit dem Operator const call sein. In diesem Fall ist die receiver ein Kontextobjekt. Der Handler ist so lange gültig, bis das Empfängerobjekt zerstört wird.

Der Standard-Handler antwortet mit dem Status 404: Nicht gefunden.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.