关于Qt5.x或6.x发送https请求解决方案 C++QT
- 创建时间:2023-10-22 / 最新修改时间:2023-10-22 10:45:15
- 957
- 0
转载请注明本文出处:http://limpire.cn/artifact/programming/cpp/224.html
关于Qt5.x或Qt6.x发送https请求解决方案
有个小需求,需要跟sap对接. sap那边的提供的接口是使用https进行调用的.
踩了半天坑,网上找了几遍,都是围绕 libeay32.dll 和 ssleay32.dll 这两个文件.后来发现并不是这样的.
所以现在记录一下正确操作.
Qt6.x 不需要依赖其他dll和安装其他库
Qt5.x 需要依赖其他dll
Qt6.x发送https
代码只需要添加这段
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
//SSL配置
QSslConfiguration config = request.sslConfiguration();
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1_2); // qt6.4使用
request.setSslConfiguration(config);
Qt 5.x 发送https
比qt6.x 稍微复杂一点
-
首先我们需要下载OpenSSL库 : https://slproweb.com/products/Win32OpenSSL.html (选择Light版本即可),
我实践的时候是选择了
Win32 OpenSSL v1.1.1w Light
这个. -
安装OpenSSL,安装时选择**“将库放入bin”**,不要放到system里!
-
重点:提取 OpenSSL 32位的bin目录里的 libcrypto-1_1.dll 和 libssl-1_1.dll 拷贝到 QT 安装目录下的 mingw73_32\bin 下面
-
提取 \Tools\mingwXXX_32\opt\bin 下的 libeay32.dll 和 ssleay32.dll 拷贝到 mingwXX_32\bin 下面
换句话说,就是把libcrypto-1_1.dll
,libssl-1_1.dll
,libcrypto-1_1.dll
和 libssl-1_1.dll
一共4个dll复制到 Qt\5.15.2\mingw81_32\bin
目录下. (注意后面打包发布的时候,记得也把这4个dll打包进去)
然后代码编写如下:
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QNetworkRequest request;
//SSL配置
QSslConfiguration config = request.sslConfiguration();
config.setPeerVerifyMode(QSslSocket::VerifyNone);
config.setProtocol(QSsl::TlsV1SslV3);
// config.setProtocol(QSsl::TlsV1_2); // qt6.4使用
request.setSslConfiguration(config);
最后编译,测试.
成功!