我从 qt/c++ 开始,在我的项目中我需要制作一个 json post/get/put 但我正在尝试做一个简单的 get 请求但我有一个错误:qt.network。 ssl: QSslSocket::connectToHostEncrypted: TLS 初始化失败
我不知道为什么,我尝试了一些方法,但都放了同样的信息。我附上我使用的代码。
主窗口.cpp:
void MainWindow::replyFini(QNetworkReply* reply)
{
QString answer = QString::fromUtf8(reply->readAll());
qDebug() << "answer------------>"<<answer;
}
void MainWindow::on_btn_login_clicked()
{
QNetworkRequest request(QUrl("https://httpbin.org/get"));
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFini(QNetworkReply*)));
manager->get(request);
}
主窗口.h:
#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkReply>
最佳答案
在 Windows 上,如果您通过在线安装程序安装 Qt,则可以选择 OpenSSL Toolkit 作为可选组件。这应该为您提供与您的 Qt 完全兼容的版本。
如果安装时没有勾选,可以重新运行C:\Qt\MaintenanceTool.exe
,选择Add or remove components。 OpenSSL Toolkit 位于 Developer and Designer Tools 部分下,它是最后一个条目。
但是,边栏中有一条注释:
Qt installer doesn't set up OpenSSL environment. User needs to define the path and environment variables.
因此一旦安装,您应该将包含 DLL 的目录添加到 PATH 环境变量或将所需的 DLL 放在 .exe
文件附近(将它们复制到 debug
和 release
项目的目录)。
该目录位于 C:\Qt\Tools\OpenSSL\Win_x64\bin
(如果需要 32 位版本,则为 Win_x86
)。在我的例子中,DLL 被命名为 libssl-1_1-x64.dll
和 libcrypto-1_1-x64.dll
。
但这还不足以将它部署到另一台机器上,在全部复制之后我又遇到了同样的错误。原因是 OpenSSL DLL 依赖于另一个 MSVC 运行时版本而不是 Qt 应用程序本身,并且这些错误没有被报告。在 Dependency Walker 中打开这些 DLL找出缺少的东西。在我的例子中是 MSVCR100.dll
,所以我必须安装 MSVC 2010 Redistributable x64 (x86 is here)。
关于c++ - GET 请求的 TLS 初始化失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53805704/