QT支持https网络请求

Qt自带的老版本OpenSSL1.0.x在今年(2019)就要结束LTS支持了,那么从Qt5.12.4开始,Qt将启用1.1.x,新版本带来的TLS1.3,以前经典的名字叫libeay32.dll和ssleay32.dll,现在改名变成了libcrypto-1_1.dll 和libssl-1_1.dll

1. 下载安装
windows版本下载地址:http://slproweb.com/products/Win32OpenSSL.html
根据自己工程对应版本32位或者64位,安装后拷贝libcrypto-1_1.dll 和libssl-1_1.dll,64位叫libcrypto-1_1-x64.dll和libssl-1_1-x64.dll到自己的exe目录下,OpenSSl安装选项有一个是否拷贝到系统目录的选项,勾上会自动拷贝到了C盘的系统目录下面。程序会默认从系统目录自动加载。如需移除OpenSSL,需要把系统目录下的也手动删除掉,64位下安装32位的OpenSSL系统目录C:\Windows\SysWOW64,安装的64位的系统目录为C:\Windows\System32。

2. 查询是否支持
查看当前Qt版本是否支持OpenSSL,Qt编译使用的OpenSSL版本。当前使用的OpenSSl版本。只要编译版本是1.1.1的。安装的也使用1.1.1即可。后面的d、g版本号可不完全一致。使用版本比编译版本高即可。

    bool bSupp = QSslSocket::supportsSsl();
    QString buildVersion = QSslSocket::sslLibraryBuildVersionString();
    QString version = QSslSocket::sslLibraryVersionString();
    qDebug() << bSupp << buildVersion << version << endl;

不支持时打印如下
false “OpenSSL 1.1.1d 10 Sep 2019” “”
支持openSSL时打印如下
true “OpenSSL 1.1.1d 10 Sep 2019” “OpenSSL 1.1.1g 21 Apr 2020”

查看当前网络请求支持协议

QNetworkAccessManager *accessManager = new QNetworkAccessManager(this);
qDebug() << accessManager->supportedSchemes();

不支持https时显示结果如下
(“ftp”, “file”, “qrc”, “http”, “data”)
支持https时显示结果如下
(“ftp”, “file”, “qrc”, “http”, “https”, “data”)

同时会报错显示如下:
qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
found error … code: 99
TLS initialization failed

3. 使用方法
使用https请求时,代码需要如下配置进行:

    QNetworkRequest request;

    // 发送https请求前准备工作;
    QSslConfiguration config;
    QSslConfiguration conf = request.sslConfiguration();
    conf.setPeerVerifyMode(QSslSocket::VerifyNone);
    conf.setProtocol(QSsl::TlsV1SslV3);
    request.setSslConfiguration(conf);
    
    request.setUrl(QUrl("https://gitee.com/"));

你可能感兴趣的:(QT)