通讯软件在自己电脑上可运行,但是在客户电脑上就无法正常运行。总是显示连接不上,日志打印后,会出现“QSslSocket::connectToHostEncrypted: TLS initialization failed”的报错。代码通用部分写法精简如下:
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
QNetworkAccessManager* pManager = new QNetworkAccessManager(this);
QNetworkRequest request;
QUrl url = ui->lineIPServer->text();
request.setUrl(QUrl(url));
request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json; charset=utf-8");
QString jsonToSever = "xxxxxx";
QString strSendToSercer = QString("{\"dataList\": %1}").arg(jsonToSever);
QByteArray bytePost = strSendToSercer.toUtf8();
QNetworkReply *pReply = pManager->post(request, bytePost);
connect(pReply, &QNetworkReply::finished, this, &MainWindow::onFinished);
void MainWindow::onFinished()
qDebug() << "server return";
QNetworkReply *pReply = qobject_cast<QNetworkReply*>(sender());
if (pReply->error()){
qDebug()<< pReply->errorString();
ui->txtSended->append(QStringLiteral("服务器无返回数据,正尝试重新上传。。。"));
pReply->deleteLater();
pReply = nullptr;
return;
int statusCode = pReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
qDebug() << "statusCode:" << statusCode;
if (statusCode >= 200 && statusCode <300){
QByteArray replyContent = pReply->readAll();
QTextCodec *codec = QTextCodec::codecForName("utf8");
QString all = codec->toUnicode(replyContent);
qDebug() << all;
ui->txtSended->append(all);
pReply->deleteLater();
pReply = nullptr;
之前biying搜了一下,大多数是在打包后的程序里放入D:\QT\Tools\mingw810_64\opt\bin目录下的两个动态库ssleay32.dll和libeay32.dll,解决了问题。但是我试了却怎么也行不通。本人使用的QT版本为5.15.2。
后来在QT的Tools目录下发现了OpenSSL文件夹。
点进去将其中的libcrypto-1_1-x64.dll和libssl-1_1-x64.dll,放在exe根目录下运行,就可以正常接收服务器返回数据。搞定!
个人猜想,可能是因为本人采用的编译器是msvc2019。再加上QT版本较新,原先的ssleay32.dll和libeay32.dll已经不再适用了。
QT的HTTPS写法参考链接链接: https://zhuanlan.zhihu.com/p/349171758
关于QT实现HTTPS通信(MSVC编译器),并解决QSslSocket::connectToHostEncrypted: TLS initialization failed的报错
根据客户需求,写了一个小的通讯软件,用于与上游服务器通讯。采用的是Https协议。通讯软件在自己电脑上可运行,但是在客户电脑上就无法正常运行。总是显示连接不上,日志打印后,会出现“QSslSocket::connectToHostEncrypted: TLS initialization failed”的报错。代码通用部分写法精简如下:原因分析:之前biying搜了一下,大多数是在打包后的程序里放入D:\QT\Tools\mingw810_64\opt\bin目录下的两个动态库ssleay32.dll
QSslSocket类为客户端和服务器提供SSL加密的套接字。
QSslSocket建立了安全的加密TCP连接,可用于传输加密的数据。它可以在客户端和服务器模式下运行,并且支持现代SSL协议,包括SSL 3和TLS 1.2。默认情况下,QSslSocket仅使用被认为是安全的SSL协议(QSsl :: SecureProtocols),但是只要在握手开始之前调用setProtocol(),就可以通过调用setProtocol()来更改SSL协议。
套接字进入ConnectedState之后,SSL
Qt 使用QNetwork 模块,进行api请求时发生错误,错误信息:qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
当你用HTTP形式的时候,会发现没有问题,而使用HTTPS时,则会报错。如果对计算机网络有所了解的人,应该大致懂原因。
因为HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了
在使用Qt发送HTTP请求中一般使用的链接都是http://前缀,而有的服务器支持 https://前缀的链接,而Qt本身是支持https的,但是https访问需要用到SSL认证,而QT默认是不支持SSL认证,所以在Qt中使用https需要进行SSL认证。
1、pro文件最上方加以下扩展
QT += network
2、添加头文件
#include <QNetworkReply>
#include <QDebug>
#include <QString>
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
qDebug() << manager->supportedSchemes();
返回的结果:
(“ftp”, “file”, “qrc”, “h...
网上有关于这方面的很多说明,大多只是说明缺少https所依赖的两个库:libeay32.dll和ssleay32.dll。但是还是需要具体情况具体分析,因为openssl的这两个库属于开源性质的,有不少不同的版本,比如QT用的版本和其它软件用的版本就可能不同,不同版本的库交叉使用同样可能存在问题;
问题:在开发机上使用https没有任何问题,但是在干净的虚拟机上发现,即使libeay32.dll...
Qt Https通信: TLS initialization failed 解决方法
Window端使用Qt 做开发请求Https资源时,会经常遇到 TLS initialization failed,分析原因是,在Qt中并未包含 SSL所包含的库,因此需要开发者,自己将库拷贝到 构建目录。
注意: 这个解决方案,也要区分Qt的版本号。
QT5.12 下载Win64OpenSSL
并点击安装,在所安装的目录下,拷贝 libea32.dll 和 ssleay32.dll 库到\Qt\Qt5.12.0\5.
闲来没事,再来一篇博文,讲讲我最近做的QT实现的Webdav通信HTTPS实现。
HTTP太不安全了,抓包随便就可以拿到报文,但是Webdav有不能通过QT自带的authenticationRequired进行用户名和密码的验证,只好自己拼接报文头,
本项目就是介绍如何用HTTPS进行Webdav通信。
authenticationRequired就是相当于我们访问一个ftp,ftp需要用户输入用户名和密码,authenticationRequired就是让用户输入
如果url是http的话,authent
解决qt.network.ssl: QSslSocket::connectToHostEncrypted: TLS initialization failed
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。设计HTTP的初衷是为了提供一种发布和接收HTML页面的方法。
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer)的介绍:
以安全为目标的 HTTP ...
CSDN-Ada助手:
C++坐标旋转,两种方式总结
CSDN-Ada助手:
关于实现QT进度条的显示值动态连续增加的方法
elais_h:
关于实现QT进度条的显示值动态连续增加的方法
欣雨秋尘:
关于实现QT进度条的显示值动态连续增加的方法
买的挂什么时候到账: