关于Qt5.x或6.x发送https请求解决方案 C++QT
  • 创建时间:2023-10-22 / 最新修改时间:2023-10-22 10:45:15
  • 728
  • 0
转载请注明本文出处:http://limpire.cn/artifact/programming/cpp/224.html


关于Qt5.x或Qt6.x发送https请求解决方案

有个小需求,需要跟sap对接. sap那边的提供的接口是使用https进行调用的.

踩了半天坑,网上找了几遍,都是围绕 libeay32.dllssleay32.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 稍微复杂一点

  1. 首先我们需要下载OpenSSL库 : https://slproweb.com/products/Win32OpenSSL.html (选择Light版本即可),

    我实践的时候是选择了 Win32 OpenSSL v1.1.1w Light 这个.

  2. 安装OpenSSL,安装时选择**“将库放入bin”**,不要放到system里!

  3. 重点:提取 OpenSSL 32位的bin目录里的 libcrypto-1_1.dlllibssl-1_1.dll 拷贝到 QT 安装目录下的 mingw73_32\bin 下面 image-20231022103543912

  4. 提取 \Tools\mingwXXX_32\opt\bin 下的 libeay32.dllssleay32.dll 拷贝到 mingwXX_32\bin 下面

image-20231022103620116

image-20231022103630192

换句话说,就是把libcrypto-1_1.dll ,libssl-1_1.dll,libcrypto-1_1.dlllibssl-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);

最后编译,测试.

成功!


请说:

昵称 Email

评论:

吃不起海鲜就买海鲜味的酱油

回车换行很爽,代表着一个段落或者一个小结的完成,打印出来之后就是一个可触摸的成品.围着这种意境,一起来技术性打酱油.

文章列表
分类目录
友情链接