Qt中使用cpp-httplib
cpp-httplib这个库只需要导入头文件就可以使用,不需要生成库非常方便。
github也有非常详细的介绍。
#include <httplib.h>
#include <QFile>
#include <QString>
#include <QDebug>
int main(void)
{
using namespace httplib;
using namespace detail;
Server svr;
svr.set_base_dir("./document");
bool ret = svr.set_mount_point("/", "./document");
svr.set_mount_point("/zh", "./document/zh");
svr.set_mount_point("/en", "./document/en");
//svr.set_mount_point(decode_url("/zh/主页.html",false).c_str(), "./document/zh/主页.html");
if (!ret) {
// The specified base directory doesn't exist...
std::cout << "The specified base directory doesn't exist..." << std::endl;
}
svr.Get("/hi", [](const Request& req, Response& res) {
res.set_content("Hello World!", "text/plain");
});
svr.Get(R"(/numbers/(\d+))", [&](const Request& req, Response& res) {
auto numbers = req.matches[1];
res.set_content(numbers, "text/plain");
});
svr.Get("/stop", [&](const Request& req, Response& res) {
svr.stop();
});
svr.Get(R"(/(\S+))", [&](const Request& req, Response& res) {
QString path = QString::fromStdString(req.path);
QStringList pathList = path.split("/");
qDebug() << pathList;
qDebug()<<decode_url(req.path,false).c_str()<<req.path.c_str();
QByteArray byteArray = "";
std::string rootPath = ("./document");
rootPath.append(req.path);
std::string t = decode_url(req.path.c_str(),false);
svr.set_mount_point(t.c_str(), "./document/zh/主页.html");
});
svr.listen("127.0.0.1", 3001);
}
根据需求本来打算使用该框架可是后面有个问题出现:中文的url解析乱码,我一直没解决就放弃了。
哪位大佬会解决能否在评论区share一下,万分感谢>_<
Qt中使用QtWebApp
QtWepApp 是 C++ 中的 HTTP 服务器库,受 Java servlet 的启发。适用于 Linux、Windows、Mac OS 和Qt 框架支持的许多其他操作系统。 官网也有非常详细的介绍。
QtWebApp 包含以下组件,这些组件可以相互独立使用:
- HTTP服务器
- 文件记录器
- 模板引擎
自己写了一个示例,html文档是现成的,并没有使用模板引擎: github地址
参考资料
- QtWebApp 官网:http://stefanfrings.de/qtwebapp/index.html
- cpp-httplib github地址:https://github.com/yhirose/cpp-httplib
- cpprestsdk github地址:https://github.com/Microsoft/cpprestsdk
- httpp github地址:https://github.com/daedric/httpp
- libhttpserver github地址:https://github.com/etr/libhttpserver