tufao是一个由QT编写的HTTP服务器。
tufao代替apache来实现http的通信。
#ifndef MYSERVERHANDLEPOST_H
#define MYSERVERHANDLEPOST_H
#include <QObject>
#include <Tufao/HttpServer>
#include <Tufao/HttpServerRequest>
#include <Tufao/HttpServerResponse>
using namespace Tufao;
class MyServerHandlePost : public QObject
{
Q_OBJECT
public:
explicit MyServerHandlePost(QObject *parent = 0);
HttpServer* server;
void handlePostData(HttpServerRequest&, HttpServerResponse&);
signals:
public slots:
void slotRequestReady(HttpServerRequest&, HttpServerResponse&);
};
#endif // MYSERVERHANDLEPOST_H
MyServerHandlePost.cpp
#include "MyServerHandlePost.h"
#include <QFile>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonDocument>
#include <QJsonArray>
MyServerHandlePost::MyServerHandlePost(QObject *parent) : QObject(parent)
{
server = new HttpServer;
if(!server->listen(QHostAddress::Any, 8081))
{
qDebug()<<"bind error";
}
connect(server, &HttpServer::requestReady,
this, &MyServerHandlePost::slotRequestReady);
}
void MyServerHandlePost::handlePostData(HttpServerRequest &request, HttpServerResponse &response)
{
// QFile file("/home/xueguoliang/a.txt_upload");
// file.open(QFile::WriteOnly);
/*
data is {username: "xxx", password: "yyy"}
*/
QByteArray data = request.readBody();
QJsonDocument doc = QJsonDocument::fromJson(data);
QJsonObject root = doc.object();
QString username = root.value("username").toString();
QString password = root.value("password").toString();
if(username == "aaa" && password== "bbb")
{
// {result: "ok"}
root.insert("result", QString("ok"));
}
else
{
// {result: "ok"}
root.insert("result", QString("err"));
root.insert("reason", QString("username or password error"));
}
{
QJsonDocument doc(root);
QByteArray buf = doc.toJson();
response.writeHead(HttpResponseStatus::OK);
response.end(buf);
}
// file.write(data);
// file.close();
}
void MyServerHandlePost::slotRequestReady(HttpServerRequest &request, HttpServerResponse & response)
{
if(request.method() == "POST")
{
// connect(&request, &HttpServerRequest::ready, )
// end signal: all data is ready
// connect(&request, SIGNAL(end()), this, SLOT(slotDataEnd()));
connect(&request, &HttpServerRequest::end, [&](){
handlePostData(request, response);
});
}
else
{
response.writeHead(HttpResponseStatus::OK);
response.end("i need post method\n");
}
}