Qt使用QNetworkAccessManager请求https(mingw64)

尝试了多种办法,现在记录下来。

查看qt支持类型
#include <QDebug>
#include <QSslSocket>
#include <QNetworkAccessManager>
qDebug()<<QSslSocket::supportSsl()<<QSslSocket::sslLibraryBuildVersionString();
QNetorkAccessManager *manager = new QNetorkAccessManager;
qDebug()<<manager->supportedSchemes();

一开始当然是不支持的,给我打印的信息如下

false "OpenSSL 1.1.1d 10 sep 2019"
("ftp", "file", "qrc", "http", "data")

尝试以下办法
1、从 Qt5.14.2\Tools\mingw730_64\opt\bin\ 复制 libeay32.dll 、ssleay32.dll 到Qt5.14.2\5.14.2\mingw730_64\bin\ 。
2、从 Qt5.14.2\Tools\QtCreator\bin\ 复制 libssl-1_1.dll、libcrypto-1_1.dll到Qt\Qt5.14.2\5.14.2\mingw730_64\bin\。
3、最后,还是重装openssl,由于我的qt是mingw64,在下载地址选择对应的Win64 OpenSSL v1.1.1L Light(轻量版)的exe。安装后,将文件夹中的libssl-1_1-x64.dll libcrypto-1_1-x64.dll放到C:Qt\Qt5.14.2\5.14.2\mingw730_64\bin\下,这次可以有效支持https访问。

使用QNetworkAccessManager访问时需要设置QNetworkRequest的SSLConfiguration,以下以Network.cpp文件举例,能够对https进行post请求,请求内容data为json格式,请求结果由自定义槽函数slotRead读取。编译成release版本时需要在windeployqt后自行引入对应编译版本的dll,5.8版本以前通过前两种办法,不行就尝试openssl。

Network.cpp:

//url
QUrl url("https://...your url...");

//network
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
manager->setNetworkAccessible(QNetworkAccessManager::Accessible);

//ssl
QNetworkRequest request;
QSslConfiguration config = request.sslConfiguration();
config.setProtocol(QSsl::TlsV1_0);	//选择对应Ssl版本参数
request.setSslConfigurtaion(config);

//request
request.setUrl(url);
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
QNetworkReply *ptrReply = manager->post(request, data);
connect(ptrReply, &QIODevice::readyRead, this, &Network::slotRead);
connect(ptrReply, SIGNAL(error(QNetworkReply::NetworkError)), 
		this, SLOT(slotError(QNetworkReply::NetworkError)));

5.12版本以前使用qt下自带的libeay32.dll和ssleay32.dll就行,但我发现有两套对应的dll文件,经过测试在mingw下的那一套都可以运行。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值