文章目录
前言
QT6自带了QtHttpServer库,但是6以下的版本需要自己编译,以下用Qt5.12.12(msvc2015_64Bit)版本为例,编译通过,原则上5.9以上的版本都可按本文编译方法。
注:Qt5.9以下不可用,因为源码会用到handleConnection。
一、下载源码
1.下载QtHttpServer源码,网址:https://github.com/qt-labs/qthttpserver
2.下载第三方依赖http-parser源码,网址:https://github.com/nodejs/http-parser
3.分别解压两个文件,复制http-parser-master文件夹下的文件到qthttpserver-master\src\3rdparty\http-parser目录下。
3.打开http-parser-master文件夹下的.qmake.conf文件,修改MODULE_VERSION,改为MODULE_VERSION = 5.12.12
4.QtCreator 打开qthttpserver-master目录下的qthttpserver.pro
5.打开项目设置,开启影子编译,设置路径为源码/build,这是为了方便后续拷贝库相关文件到Qt安装目录下。
开始编译,以下分为不依赖ssl和依赖ssl两种:
二、不依赖QtSslServer的编译
很多项目并不需要ssl,需要ssl的看后面章节。
1.打开src/src.pro,注释掉qtConfig(ssl)那三行。
2.打开src/httpserver.pro,注释掉qtConfig(ssl): QT += sslserver 一行。
3.编译生成
二、依赖QtSslServer的编译
1.QtHttpServer默认是依赖ssl的,所以把一去掉的那些注释改回来,直接编译即可。
2.这个编译很容易出错,即使编译出来了,后面使用也很麻烦(需要使用openssl,且生成cert和key)不建议用这种,建议使用上面的不依赖ssl的编译,如果应用实在需要ssl支持,可以用nginx配置代理ssl,而不是在httpserver实现里用ssl。
三、编译出错的处理
1.编译报错提示:无法打开"QtHttpServer/xxx.h"文件 时,把<private/xxx.h>改为"xxx.h",#include <QtHttpServer/qsslserver.h>改为"xxx.h"
2.编译报错无法链接Qt5SslServer时,这是编译依赖QtSslServer时容易出现的错误。打开httpserver.pro文件,注释 qtConfig(ssl): QT += sslserver 一行,在文件最后加入:
win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/…/…/build/lib/ −lQt5SslServer
else:win32:CONFIG(debug,debug∣release):LIBS+=−L$$PWD/…/…/build/lib/ -lQt5SslServerd
此处LIBS的路径改为自己电脑上的生成 Qt5SslServer.lib 库所在路径。
三、拷贝QtHttpServer到QT安装目录
把编译好的qthttpserver库相关文件放到对应的qt安装目录下。
1.拷贝qthttpserver-master\src\httpserver目录下的头文件到qthttpserver-master\build\include\QtHttpServer,拷贝qthttpserver-master\src\sslserver目录下的头文件到qthttpserver-master\build\include\QtSslServer。
2.拷贝qthttpserver-master\build\bin下的全部文件放到Qt5.12.12\5.12.12\msvc2015_64\bin。
3.拷贝qthttpserver-master\build\include下的QtHttpServer和QtSslServer文件夹到Qt5.12.12\5.12.12\msvc2015_64\include。
4.拷贝qthttpserver-master\build\lib下的.dll、.lib、.prl共12个文件到Qt5.12.12\5.12.12\msvc2015_64\lib。
5.拷贝qthttpserver-master\build\mkspecs\modules-inst下的文件到Qt5.12.12\5.12.12\msvc2015_64\mkspecs\modules。
四、测试QtHttpServer
1.新建一个工程,在.pro文件里添加:QT += sslserver httpserver,如果不依赖ssl,则添加:QT += httpserver
2.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。<