1.Qt OpenSSL
在使用Qt发送HTTP请求中一般使用的链接都是http://前缀,而有的服务器支持 https://前缀的链接,而Qt本身是支持https的,但是https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在Qt中使用https需要进行SSL认证。
1.1.查看QT所支持的OpenSSL版本
bool bSupp = QSslSocket::supportsSsl();
QString buildVersion = QSslSocket::sslLibraryBuildVersionString();
QString version = QSslSocket::sslLibraryVersionString();
qDebug() << bSupp << buildVersion << version << endl;
不支持时打印如下:
false "OpenSSL 1.1.1g 21 Apr 2020" ""
支持openSSL时打印如下:
true "OpenSSL 1.1.1g 21 Apr 2020" "OpenSSL 1.1.1t 7 Feb 2023"
那对应的版本就是OpenSSL 1.1.1d 或者OpenSSL 1.1.1g 。一定要下载对应的版本。
1.2.下载安装OpenSSL库
- Qt必须使用5.12或更高版本,OpenSSL一定要对应版本,版本不同都可能导致失败;
- 下载OpenSSL库:http://slproweb.com/products/Win32OpenSSL.html,选择32位和64位Light版本;
- 提取32位文件将OpenSSL 32位的bin目录里的 libcrypto-1_1.dll 和 libssl-1_1.dll 拷贝到D:\develop\qt\5.15.2\mingw81_32\bin 下面;
- 提取64位文件,将OpenSSL 64位的bin目录里的 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll 拷贝到 D:\develop\qt\5.15.2\mingw81_64\bin 下面
- 在发送请求前设置一下:
QNetworkRequest request(url);
QSslConfiguration conf = request.sslConfiguration();
conf.setPeerVerifyMode(QSslSocket::VerifyNone);
conf.setProtocol(QSsl::AnyProtocol);
request.setSslConfiguration(conf);
1.3.程序添加openssl库
支持HTTPS请求需要配置OpenSSL环境,Qt默认是不带SSl认证的,直接访问HTTPS会有错误信号。 需要对应的库文件 libcrypto-1_1.dll和libssl-1_1.dll,将这两个库文件拷贝到程序生成目录下(即生成exe的同级目录)或者拷贝到QtNetwork模块的库文件目录中。
注意:
在新建项目的时候,因为我只装了64位的OpenSSL,所以如果图中MinGW32和MinGW64都勾选的话,https也出不来,要么只勾选MinGW32或者MinGW64,要么就把64和32位的OpenSSL都装上。