Creare un HTTP server con Qt

Mattepuffo's logo
Creare un HTTP server con Qt

Creare un HTTP server con Qt

Da non so quale versione di Qt, è stato introdotto QtHttpServer, che ci consente di crare un HTTP server.

Ma non è stato proprio facile testarlo; qui cerco di spiegarvi il meglio possibile come fare.

Prima di tutto dovete:

  • aprite MaintenanceTool
  • scegliete Add or remove components
  • andate sotto Qt -> VOSTRA VERSIONE -> Additional Libraries  e selezionate Qt HTTP Server (TP)
  • andate avanti con l'installazione

Create un progetto; io ho scelto di tipo console.

Nel file CMakeLists.txt dobbiamo aggiungere due righe:

find_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(test_qt_console Qt6::HttpServer)

Questo il mio completo:

cmake_minimum_required(VERSION 3.14)

project(test_qt_console LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core)
find_package(Qt6 REQUIRED COMPONENTS HttpServer)

add_executable(test_qt_console
    main.cpp
)

target_link_libraries(test_qt_console Qt${QT_VERSION_MAJOR}::Core)
target_link_libraries(test_qt_console Qt6::HttpServer)

install(TARGETS test_qt_console
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

Adesso eseguite una compilazione.

Infine il nostro codice:

#include <QCoreApplication>
#include <QtHttpServer>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QHttpServer httpServer;
    httpServer.route("/", []() {
        return "Server in Qt";
    });

    httpServer.route("/nome/", [] (const QString nome) {
        return QString("Ciao %1").arg(nome);
    });

    httpServer.afterRequest([] (QHttpServerResponse &&resp) {
        resp.setHeader("Server", "Qt HTTP Server");
        return std::move(resp);
    });

    const auto port = httpServer.listen(QHostAddress::Any);
    if (!port) {
        qDebug() << QCoreApplication::translate("Errore", "Il server non è partito!");
        return 0;
    }

    qDebug() << QCoreApplication::translate("Ok",
                                            "Server attivo su http://127.0.0.1:%1/"
                                            "(Premi CTRL+C per uscire)").arg(port);

    return a.exec();
}

La porta è random; in questo esempio abbiamo creato due rotte:

  • http://localhost:PORTA/
  • http://localhost:PORTA/nome/VALORE

Enjoy!


Condividi

1 Commenti

  • franco

    ciao! grazie ottima guida!!

    17/05/2023

Commentami!