QHttpServer Class
QHttpServer は、QAbstractHttpServer およびQHttpServerRouter 用の簡易 API です。さらに...
ヘッダー | #include <QHttpServer> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS HttpServer) target_link_libraries(mytarget PRIVATE Qt6::HttpServer) |
qmake: | QT += httpserver |
以来: | Qt 6.4 |
継承: | QAbstractHttpServer |
パブリック関数
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) |
詳細説明
QHttpServer は、リクエストハンドラの範囲を設定することで、シンプルな Http サーバを作成することができます。
route 関数を使うと、QHttpServerRouter サーバにルールを追加することができます。全てのリクエストの後に呼ばれるハンドラを登録するにはaddAfterRequestHandler を使い、 ハンドリングされていない全てのリクエストのハンドラを登録するにはsetMissingHandler を使います。
最小限の例
QHttpServerserver; server.route("/", []() {return "hello world"; });autotcpserver= newQTcpServer();if(!tcpserver->listen()|| !server.bind(tcpserver.get())){deletetcpserver;return -1;} qDebug() << "Listening on port" << tcpserver->serverPort();
メンバー関数ドキュメント
[explicit]
QHttpServer::QHttpServer(QObject *parent = nullptr)
QHttpServer のインスタンスを親parent で作成します。
[override virtual noexcept]
QHttpServer::~QHttpServer()
QHttpServer を破壊する。
template <typename Functor> void QHttpServer::addAfterRequestHandler(const QObject *receiver, Functor &&slot)
リクエストが処理されるたびに呼び出されるreceiver とslot を登録する。
slot はシグネチャvoid (*)(const QHttpServerRequest &, QHttpServerResponse &)
を実装しなければならない。
slot は、関数ポインタ、ミュータブルでないラムダ、あるいはconst call演算子を持つ他のコピー可能な呼び出し可能なものであることもできる。その場合、receiver はコンテキストオブジェクトとなり、ハンドラはコンテキストオブジェ クトが破棄されるまで有効である。
例
QHttpServer server; server.addAfterRequestHandler(&server, [] (const QHttpServerRequest &req, QHttpServerResponse &resp) { resp.write(req.body(), "text/plain"_ba); }
注意: これらのハンドラは、QHttpServerResponder&
引数を持つハンドラで処理されるリクエストに対してはコールされません。
void QHttpServer::clearMissingHandler()
ステータス404 Not Foundの返信を生成するハンドラをデフォルトのものにリセットする。
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, QHttpServerRequest::Methods method, const QObject *receiver, Functor &&slot)
これは、サーバーのQHttpServerRouter に新しいRule
を追加する便利なメソッドである。Ruleテンプレートパラメータには、QHttpServerRouterRule から派生した任意のカスタムクラスを指定できます。
この関数はリクエストのセットを表すpathPattern とmethod を受け取り、提供されたreceiver とslot にすべてのリクエストを転送する新しいQHttpServerRouterRule (テンプレートパラメータで指定されている場合はカスタムルール) を作成します。ルールはrouter に追加される。pathPattern の有効なパターンの詳細については、QHttpServerRouterRule のドキュメントを参照のこと。
slot は、 のメンバ関数ポインタであることができます。 また、関数ポインタ、ミュータブルでないラムダ、または const call 演算子を持つ他のコピー可能な呼び出し可能な関数であることもできます。その場合、 は ポインタでなければなりません。登録が成功し、ルールが実行されるためには、受信者は、 と同じスレッド親和性を共有しなければならない。receiver receiver QObject receiver QHttpServer
スロットはreturnステートメントで応答を表現することができる。関数はQHttpServerResponse またはQHttpServerResponse に変換可能な任意の型を返さなければならない。QHttpServerResponse を参照してください。
QHttpServer server; server.route("/test", this, [] () { return ""; });
あるいは、オプションで最後の関数引数QHttpServerResponder&
を指定し、そこにレスポンスを書き込むこともできます。レスポンスがQHttpServerResponder&
に書き込まれる場合、関数はvoid
を返さなければなりません。
server.route("/test2", this, [] (QHttpServerResponder &responder) { responder.write(QHttpServerResponder::StatusCode::Forbidden); });
スロットはさらに、リクエストの詳細な情報を得るために、最後から2番目のパラメー タとしてconst QHttpServerRequest&
を持つことができます。
server.route("/test3", this, [] (const QHttpServerRequest &request, QHttpServerResponder &responder) { responder.write(req.body(), "text/plain"_ba);});
最後に、コールバックは、QHttpServerRouter::converters に登録されている、任意の量のコピー可能なパラメータを含むことができる。 デフォルトでは、これらはほとんどの整数型、float、double、QString 、QByteArray 、QUrl である。その他のコンバータを登録することもできます。QHttpServerRouter::addConverter を参照してください。これらのパラメータは、pathPattern に対応するプレースホルダを持つ必要があります。プレースホルダと pathPattern の詳細については、QHttpServerRouterRule を参照してください。
QHttpServer server; server.route("/test/<arg>", this, [] (const int page) { return ""; });
この関数は、成功すれば新しく作成されたルールへのポインタを返し、そうでなければnullptr
を返します。 このポインタを使用して、カスタムQHttpServerRouter クラスのパラメータを設定することができます:
auto rule = server.route<MyRule>("/test", this, [] () {return "";}); rule->setParameter("test");
.この関数はどのルートコールバックからも呼び出してはいけません。
注意: リクエストがQHttpServerResponder&
を引数として受け取るハンドラで処理された場合、 リクエストハンドラ以降のハンドラ(addAfterRequestHandler を参照)はどれ も呼び出されない。
リクエストはデフォルトでQHttpServer
のスレッド内で順次処理される。非同期処理が望まれる場合、リクエストハンドラはQFuture<QHttpServerResponse>
を返すかもしれない:
server.route("/feature/", [] (int id) { return QtConcurrent::run([] () { return QHttpServerResponse("the future is coming"); }); });
QFuture
の本体は非同期に実行されるが、すべてのネットワーク通信はQHttpServer
が属するスレッドで逐次的に実行される。QFuture
を返すルートでは、QHttpServerResponder&
の特別引数は使用できません。
QHttpServerRouter::addRule およびaddAfterRequestHandlerも参照してください 。
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, Functor &&handler)
これはオーバーロードされた関数である。
QHttpServer::route のオーバーロードで、pathPattern とQHttpServerRequest::Method::AnyKnown のルールを作成します。すべてのリクエストは、handler に転送されます。 は、関数ポインタ、ミュータブルでないラムダ、または const call 演算子を持つ他のコピー可能な呼び出し可能な関数にすることができます。このルールは、QHttpServer が破棄されるまで有効である。
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, QHttpServerRequest::Methods method, Functor &&handler)
これはオーバーロードされた関数である。
QHttpServer::route のオーバーロードで、pathPattern とmethod のルールを作成します。すべてのリクエストは、handler に転送されます。 は、関数ポインタ、ミュータブルでないラムダ、または const call 演算子を持つ他のコピー可能な呼び出し可能な関数にすることができます。このルールは、QHttpServer が破棄されるまで有効である。
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, const QObject *receiver, Functor &&slot)
これはオーバーロードされた関数である。
QHttpServer::route のオーバーロードで、pathPattern とQHttpServerRequest::Method::AnyKnown のルールを作成します。すべてのリクエストはreceiver とslot に転送される。
QHttpServerRouter *QHttpServer::router()
ルーターオブジェクトへのポインターを返します。
const QHttpServerRouter *QHttpServer::router() const
定数ルーターオブジェクトへのポインターを返します。
template <typename Functor> void QHttpServer::setMissingHandler(const QObject *receiver, Functor &&slot)
処理されなかったリクエストのハンドラを設定する。
すべての処理されなかったリクエストはreceiver のslot に転送(forward)される。
slot は署名void (*)(const QHttpServerRequest &, QHttpServerResponder &)
を実装しなければならない。slot は、関数ポインタ、ミュータブルでないラムダ、あるいはconst call演算子を持つ他のコピー可能な呼び出し可能なものであることもできる。その場合、receiver はコンテキストオブジェクトとなる。ハンドラは、レシーバーオブジェクトが破棄されるまで有効である。
デフォルトのハンドラは、ステータス404:Not Foundです。
© 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.