IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【最详细】QtHttpServer编译使用,亲测可用 -> 正文阅读

[开发工具]【最详细】QtHttpServer编译使用,亲测可用

一、QtSslServer和QtHttpServer编译

  1. 此处使用Qt5.15(MSVC 2019 32Bit)版本,Qt5.9以下不可用,编译不通过,因为源码会用到handleConnection。
    在这里插入图片描述

  2. 下载QtHttpServer源码,网址:https://github.com/qt-labs/qthttpserver。

  3. 下载第三方依赖http-parser源码,网址:https://github.com/nodejs/http-parser。
    在这里插入图片描述

  4. 分别解压两个文件,复制http-parser-master文件夹下的文件到qthttpserver-master\src\3rdparty\http-parser目录下。
    在这里插入图片描述

  5. QtCreator 打开qthttpserver-master目录下的qthttpserver.pro。
    在这里插入图片描述

  6. 首先编译sslserver,会发现以下错误,需要把<private/xxx.h>改为“xxx.h”,#include <QtSslServer/qsslserver.h>改为“xxx.h”,编译成功后显示生成Qt5SslServer.lib和Qt5SslServer.dll。
    在这里插入图片描述
    在这里插入图片描述

  7. 然后编译httpserver,首先屏蔽加载sslserver,加载lib,lib路径根据实际路径加载。
    win32:CONFIG(release, debug|release): LIBS += -L P W D / . . / . . / B u i l d / R e l e a s e / l i b / ? l Q t 5 S s l S e r v e r e l s e : w i n 32 : C O N F I G ( d e b u g , d e b u g ∣ r e l e a s e ) : L I B S + = ? L PWD/../../Build/Release/lib/ -lQt5SslServer else:win32:CONFIG(debug, debug|release): LIBS += -L PWD/../../Build/Release/lib/?lQt5SslServerelse:win32:CONFIG(debug,debugrelease):LIBS+=?LPWD/…/…/Build/Release/lib/ -lQt5SslServerd
    在这里插入图片描述

在这里插入图片描述
8. 编译出错时,把<private/xxx.h>改为“xxx.h”,#include <QtHttpServer/qsslserver.h>改为“xxx.h”,编译成功后显示生成Qt5HttpServer.lib和Qt5HttpServer.dll。
在这里插入图片描述
9. 此文件修改处需留意一下,后续使用库时需要修改。
在这里插入图片描述
10. 编译成功后。
在这里插入图片描述
在这里插入图片描述

二、使用QtHttpServer

  1. 把编译好的qthttpserver-master\build\Release文件放到对应的qt安装目录下。
    ① bin下的全部文件放到Qt\Qt5.15\5.15.0\msvc2019\bin。
    ② 拷贝qthttpserver-master\src\httpserver目录下的头文件到qthttpserver-master\build\Release\include\QtHttpServer,
    拷贝qthttpserver-master\src\sslserver目录下的头文件到qthttpserver-master\build\Release\include\QtSslServer,
    把qthttpserver-master\build\Release\include下的QtHttpServer和QtSslServer文件夹拷贝到Qt\Qt5.15\5.15.0\msvc2019\include。
    ③ 把下图8个文件拷贝到Qt\Qt5.15\5.15.0\msvc2019\lib。
    在这里插入图片描述
    ④把qthttpserver-master\build\Release\mkspecs\modules-inst下的文件拷贝到Qt\Qt5.15\5.15.0\msvc2019\mkspecs\modules。
  2. 新建测试工程QtHttpServerTest。
    在这里插入图片描述
  3. pro加上sslserver和httpserver。
    在这里插入图片描述
  4. main代码如下。
    ① 使用ssl,先测试QSslSocket::supportsSsl()是否支持,返回true即可。
    ② 如果不可使用,需要安装openssl,网址:https://slproweb.com/products/Win32OpenSSL.html,此处安装的是32Bit Light,下载安装好即可。
    ③ 以后使用可以把libcrypto-1_1.dll和libssl-1_1.dll拷贝到应用程序下。
    ④ 需要使用openssl生成cert和key。
    在这里插入图片描述
#include "mainwindow.h"

#include <QApplication>
#include <QFile>
#include<QMessageBox>

#include <QtHttpServer/qhttpserver.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    qDebug() << QSslSocket::supportsSsl() << QSslSocket::sslLibraryBuildVersionString() << QSslSocket::sslLibraryVersionString();
    QMessageBox::information(0, "tip", QSslSocket::supportsSsl() == true ? "1" : "0", QMessageBox::Ok);

    QHttpServer httpServer;
    httpServer.route("/Hello", []() {
        return "Hello world";
    });

    httpServer.afterRequest([](QHttpServerResponse &&resp) {
        resp.setHeader("Server", "Super server!");
        return std::move(resp);
    });

    QSslConfiguration sslConfiguration;

    QString path = QApplication::applicationDirPath();


        QFile certFile(path+"/ssl/my.cert");

        QFile keyFile(path+"/ssl/my.key");

        certFile.open(QIODevice::ReadOnly);

        keyFile.open(QIODevice::ReadOnly);

        QSslCertificate certificate(&certFile, QSsl::Pem);

        QSslKey sslKey(&keyFile, QSsl::Rsa, QSsl::Pem);

        certFile.close();

        keyFile.close();

        sslConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);

        //sslConfiguration.setProtocol(QSsl::TlsV1_0);

        sslConfiguration.setLocalCertificate(certificate);

        sslConfiguration.setPrivateKey(sslKey);

    httpServer.sslSetup(sslConfiguration);



    const auto port = httpServer.listen(QHostAddress::Any, 62138);
    if (!port) {
        qDebug() << QCoreApplication::translate(
                "QHttpServerExample", "Server failed to listen on a port.");
        QMessageBox::information(0, "tip", QString("Server failed to listen on a port--%1.").arg(port), QMessageBox::Ok);
        return 0;
    }

    qDebug() << QCoreApplication::translate(
            "QHttpServerExample", "Running on http://127.0.0.1:%1/ (Press CTRL+C to quit)").arg(port);
     QMessageBox::information(0, "tip", QString("Running on http://127.0.0.1:%1/ (Press CTRL+C to quit)").arg(port), QMessageBox::Ok);

    MainWindow w;
    w.show();
    return a.exec();
}

  1. 此时编译会出错,在第一的9点注明过问题,需要把"…/sslserver/qsslserver.h"改为"qsslserver.h"
    在这里插入图片描述
  2. 运行,大功告成,使用postman测试ok。
    ssl可用:
    在这里插入图片描述
    监听的端口号:
    在这里插入图片描述
    运行成功:
    在这里插入图片描述
    postman返回ok:
    在这里插入图片描述

源代码和测试例子,所需要的ssl库等文件全部上传在csdn供下载。
https://download.csdn.net/download/neochan1108/85068191

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:31:11  更:2022-04-04 12:35:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:00:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码