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 을 사용합니다.
최소한의 예시입니다:
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();
멤버 기능 문서
[explicit]
QHttpServer::QHttpServer(QObject *parent = nullptr)
부모가 parent 인 QHttpServer 인스턴스를 생성합니다.
[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 호출 연산자를 사용하여 복사 가능한 다른 호출 가능 객체일 수도 있습니다. 이 경우 receiver 은 컨텍스트 객체가 되고 핸들러는 컨텍스트 객체가 소멸될 때까지 유효합니다.
예시:
QHttpServer server; server.addAfterRequestHandler(&server, [] (const QHttpServerRequest &req, QHttpServerResponse &resp) { resp.write(req.body(), "text/plain"_ba); }
참고: 이러한 핸들러는 QHttpServerResponder&
인수가 있는 핸들러가 처리하는 요청에 대해서는 호출되지 않습니다.
void QHttpServer::clearMissingHandler()
상태 404 찾을 수 없음으로 회신을 생성하는 기본 처리기로 재설정합니다.
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 (또는 템플릿 매개 변수에 지정된 경우 사용자 정의 Rule)을 만듭니다. 이 규칙은 router 에 추가됩니다. pathPattern 의 유효한 패턴에 대한 자세한 내용은 QHttpServerRouterRule 문서를 참조하세요.
slot 는 receiver 의 멤버 함수 포인터일 수 있습니다. 또한 함수 포인터, 변경 불가능한 람다 또는 const 호출 연산자를 사용하여 복사 가능한 다른 호출 가능 항목일 수도 있습니다. 이 경우 receiver 는 QObject 포인터여야 합니다. 이 규칙은 receiver 의 수명 기간 동안 유효합니다. 수신자는 등록에 성공하고 규칙이 실행되려면 QHttpServer 과 동일한 스레드 선호도를 공유해야 합니다.
슬롯은 반환 문으로 응답을 표현할 수 있습니다. 함수는 QHttpServerResponse 또는 QHttpServerResponse 으로 변환할 수 있는 모든 유형을 반환해야 합니다. 다양한 변환 생성자를 사용할 수 있습니다( QHttpServerResponse 참조).
QHttpServer server; server.route("/test", this, [] () { return ""; });
또는 응답이 기록되어야 하는 마지막 함수 인자 QHttpServerResponder&
를 선택적으로 제공할 수 있습니다. 응답이 QHttpServerResponder&
에 기록되는 경우 함수는 void
을 반환해야 합니다.
server.route("/test2", this, [] (QHttpServerResponder &responder) { responder.write(QHttpServerResponder::StatusCode::Forbidden); });
요청에 대한 자세한 정보를 얻기 위해 두 번째에서 마지막 파라미터로 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 에 해당하는 자리 표시자가 있어야 합니다. 자리 표시자 및 경로 패턴에 대한 자세한 내용은 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
이 속한 스레드에서 순차적으로 실행됩니다. QHttpServerResponder&
특수 인수는 QFuture
을 반환하는 경로에는 사용할 수 없습니다.
QHttpServerRouter::addRule 및 addAfterRequestHandler 을참조하세요 .
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, Functor &&handler)
이것은 과부하된 함수입니다.
pathPattern 및 QHttpServerRequest::Method::AnyKnown 에 대한 규칙을 생성하기 위해 QHttpServer::route 을 오버로드합니다. 모든 요청은 함수 포인터, 변경 불가능한 람다 또는 const 호출 연산자를 사용하여 복사 가능한 기타 호출 가능 함수가 될 수 있는 handler 로 전달됩니다. 이 규칙은 QHttpServer 이 파괴될 때까지 유효합니다.
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, QHttpServerRequest::Methods method, Functor &&handler)
이것은 과부하된 함수입니다.
pathPattern 및 method 에 대한 규칙을 생성하기 위해 QHttpServer::route 을 오버로드합니다. 모든 요청은 함수 포인터, 변경 불가능한 람다 또는 const 호출 연산자를 사용하여 복사 가능한 기타 호출 가능 함수가 될 수 있는 handler 로 전달됩니다. 이 규칙은 QHttpServer 이 파괴될 때까지 유효합니다.
template <typename Rule = QHttpServerRouterRule, typename Functor> Rule *QHttpServer::route(const QString &pathPattern, const QObject *receiver, Functor &&slot)
이것은 과부하된 함수입니다.
pathPattern 및 QHttpServerRequest::Method::AnyKnown 에 대한 규칙을 생성하기 위해 QHttpServer::route 의 과부하가 발생합니다. 모든 요청은 receiver 및 slot 으로 전달됩니다.
QHttpServerRouter *QHttpServer::router()
라우터 객체에 대한 포인터를 반환합니다.
const QHttpServerRouter *QHttpServer::router() const
상수 라우터 객체에 대한 포인터를 반환합니다.
template <typename Functor> void QHttpServer::setMissingHandler(const QObject *receiver, Functor &&slot)
처리되지 않은 요청에 대한 핸들러를 설정합니다.
처리되지 않은 모든 요청은 receiver 의 slot 으로 전달됩니다.
slot 은 void (*)(const QHttpServerRequest &, QHttpServerResponder &)
서명을 구현해야 합니다. slot 은 함수 포인터, 변경 불가능한 람다 또는 const 호출 연산자를 사용하는 기타 복사 가능한 호출 가능 객체일 수도 있습니다. 이 경우 receiver 은 컨텍스트 객체가 됩니다. 핸들러는 수신자 객체가 소멸될 때까지 유효합니다.
기본 핸들러는 상태 404로 응답합니다: 찾을 수 없음으로 응답합니다.
© 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.