シンプルなHTTPサーバー

HTTPサーバーのセットアップ方法の簡単な例です。

この例では、QHttpServer クラスを使用してサーバーをセットアップする方法を示します。サーバはbind()関数でポートをリッスンしているQTcpServer にバインドされ、route() 関数を使用して、いくつかの異なる受信URLのそれぞれにハンドラを追加します。URLの1つである"/auth "では、HTTPベーシック認証が使用される。

QSslConfiguration conf = QSslConfiguration::defaultConfiguration();
const auto sslCertificateChain =
        QSslCertificate::fromPath(QStringLiteral(":/assets/certificate.crt"));
if (sslCertificateChain.empty()) {
    qWarning() << QCoreApplication::translate("QHttpServerExample",
                                              "Couldn't retrieve SSL certificate from file.");
    return -1;
}
QFile privateKeyFile(QStringLiteral(":/assets/private.key"));
if (!privateKeyFile.open(QIODevice::ReadOnly)) {
    qWarning() << QCoreApplication::translate("QHttpServerExample",
                                              "Couldn't open file for reading: %1")
                  .arg(privateKeyFile.errorString());
    return -1;
}

conf.setLocalCertificate(sslCertificateChain.front());
conf.setPrivateKey(QSslKey(&privateKeyFile, QSsl::Rsa));

privateKeyFile.close();

auto sslserver = std::make_unique<QSslServer>();
sslserver->setSslConfiguration(conf);
if (!sslserver->listen() || !httpServer.bind(sslserver.get())) {
    qWarning() << QCoreApplication::translate("QHttpServerExample",
                                              "Server failed to listen on a port.");
    return -1;
}
quint16 sslPort = sslserver->serverPort();
sslserver.release();

上記の例では、QSslConfiguration 、HTTPSトラフィックを提供するために、QHttpServer 、SSL設定を作成する方法を示しています。

httpServer.addAfterRequestHandler(&httpServer, [](const QHttpServerRequest &, QHttpServerResponse &resp) {
    auto h = resp.headers();
    h.append(QHttpHeaders::WellKnownHeader::Server, "Qt HTTP Server");
    resp.setHeaders(std::move(h));
});

上記の例では、QHttpServeraddAfterRequestHandler() 関数を使用して、route() 関数で処理された後にQHttpServerResponse オブジェクトを変更する方法を示しています。レスポンスにHTTPヘッダーを追加する方法を示しています。

ファイル

画像

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。