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!
c++ qt qthttpserver cmakelists
1 Commenti
ciao! grazie ottima guida!!
17/05/2023