QtHttpServer是一个轻量级服务器。由于本人编译源码不成功,直接从网上找到已经编译好的代码,直接编译可得到QtHttpServer的相关库。
下面介绍一下QtHttpServer的使用。
QtHttpServer的使用
创建路由的格式:lambda表达式
httpserver.route(路由地址字符串,方法类型,[](){});
方法类型主要用的包括QHttpServerRequest::Method::POST和QHttpServerRequest::Method::GET
QHttpServerRequest类可以用来接收请求发送过来的消息,函数方法:request.body()获取请求数据,接收到的数据类型为QByteArray字节数组。
QHttpServerResponder类用来返回响应的数据。写入反应数据方法如下:
void write(QIODevice *data,HeaderList headers,StatusCode status = StatusCode::Ok); void write(QIODevice *data,const QByteArray &mimeType,StatusCode status = StatusCode::Ok); void write(const QJsonDocument &document,HeaderList headers,StatusCode status = StatusCode::Ok); void write(const QJsonDocument &document,StatusCode status = StatusCode::Ok); void write(const QByteArray &data,HeaderList headers,StatusCode status = StatusCode::Ok); void write(const QByteArray &data,const QByteArray &mimeType,StatusCode status = StatusCode::Ok); void write(HeaderList headers, StatusCode status = StatusCode::Ok); void write(StatusCode status = StatusCode::Ok); void writeHeader(const QByteArray &key, const QByteArray &value); void writeHeaders(HeaderList headers); void writeBody(const char *body, qint64 size); void writeBody(const char *body); void writeBody(const QByteArray &body);
例子如下:
get请求:
httpserver.route("/api/version", QHttpServerRequest::Method::GET, [] (QHttpServerResponder &&responder) {
QString str = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz");
QJsonObject dataObj;
dataObj.insert("version","3.0.0");
dataObj.insert("dateTime",str);
QJsonDocument recordJsonDocument(dataObj);
responder.write(recordJsonDocument);
});
上面的例子中:路由地址为:http://127.0.0.1:1234/api/version
请求方法为:get方法
参数中:QHttpServerResponder返回响应数据
post请求:
QHttpServer httpserver;
httpserver.route("/api/picture", QHttpServerRequest::Method::POST, [] (const QHttpServerRequest &request,QHttpServerResponder &&responder) {
//QJsonDocument::fromJson(request.body());
qDebug()<<QString::fromStdString(request.body().toStdString());
responder.writeStatusLine(QHttpServerResponder::StatusCode::Ok);
responder.writeHeader("Content-Type", "image/png");
QFile file("../untitled54444444444444444444444444444/任嘉伦.png");
if (!file.open(QIODevice::ReadOnly)||file.size()==0)
{
file.close();
qDebug()<<"打开图片失败";
return ;
}
//写响应头,数据长度,和方法体数据长度一致
responder.writeHeader("Content-Length", QString::number(file.size()).toUtf8());
responder.writeBody(file.readAll(), file.size());
});
上面的例子中:路由地址为:http://127.0.0.1:1234/api/picture
请求方法为:post方法
参数中:QHttpServerRequest请求类获取请求数据;
QHttpServerResponder返回响应数据
监听
quint16 port = httpserver.listen(QHostAddress::Any,1234);
if (!port)
{
qDebug()<< QString("error:Http server listen [%1] failed").arg(port);
}
本人整理的QtHttpServer库的编译和QtHttpServer的使用案例:https://download.csdn.net/download/m0_67254672/85906230