gpt4 book ai didi

c++ - 如何让 Qt 5.8 在 Windows 上使用 OpenSSL

转载 作者:行者123 更新时间:2023-11-30 02:25:31 32 4
gpt4 key购买 nike

我试图让 Qt 5.8 在 Windows 上与 OpenSSL 一起工作,但每次我向前迈出一步,我都会遇到另一个更大的问题。

编辑/更新:此错误仅在 Debug模式下发生!

到目前为止,这是我的设置:

  • 已安装 Qt 5.8
  • 下载并编译的 OpenSSL 版本
  • 将小测试项目转移到MSVS2015
  • 将 dll 文件(libeay32.dll 和 ssleay32.dll)复制到应用程序目录
  • SSL 连接现在工作正常

但是问题来了:每次我打开一个连接时,无论是否使用 SSL,我都会通过退出应用程序得到一个错误。在 (ntdll.dll) 处抛出异常。

Error Message, Call Stack, ...

我用 Visual Leak Detector 测试了我的代码,因为我认为这是一个内存问题,但它并没有解决我的问题。我不知道应该从哪里开始了......

Here is a small example in Qt Creator 4.2.1 which doesn't work either

这是我的代码(当我删除 OpenSSL dll 时它适用于 http):

void InfoGatherer::getInfo(QString name)
{
// TODO: Search for the name and select right page
QUrl url = QUrl(name);
data.clear();

QNetworkRequest *request = new QNetworkRequest(url);
request->setRawHeader("User-Agent", userAgent);

if (name.startsWith("https"))
{
QSslConfiguration sslConfiguration(QSslConfiguration::defaultConfiguration());
sslConfiguration.setProtocol(QSsl::TlsV1_2OrLater);
request->setSslConfiguration(sslConfiguration);
}
else
{
// TODO: Try to get https
}

reply = webCtrl->get(*request);

connect(reply, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(slotError(QNetworkReply::NetworkError)));
connect(reply, SIGNAL(finished()), this, SLOT(onReplyFinished()));

// Mem leaks (Visual Leak Detector)
if(!name.startsWith("https"))
webCtrl->deleteResource(*request);

delete request;
}

void InfoGatherer::onReadyRead()
{
data.append(reply->readAll());
}

void InfoGatherer::slotError(QNetworkReply::NetworkError)
{
// TODO
qWarning() << "ErrorNo: " << reply->error() << "for url: " << reply->url().toString();
qDebug() << "Request failed, " << reply->errorString();
qDebug() << "Headers:" << reply->rawHeaderList() << "content:" << reply->readAll();
}

void InfoGatherer::onReplyFinished()
{
QString html = QString(data);

emit got_webpage(&html);
}

Qt 正确检测到 OpenSSL 库:

qDebug() << "Support SSL:  " << QSslSocket::supportsSsl()
<< "\nLib Version Number: " << QSslSocket::sslLibraryVersionNumber()
<< "\nLib Version String: " << QSslSocket::sslLibraryVersionString()
<< "\nLib Build Version Number: " << QSslSocket::sslLibraryBuildVersionNumber()
<< "\nLib Build Version String: " << QSslSocket::sslLibraryBuildVersionString();
  • 支持SSL:真
  • 库版本号:268443791
  • Lib 版本字符串:“OpenSSL 1.0.2h 2016 年 5 月 3 日”
  • 库构建版本号:268443791
  • Lib 构建版本字符串:“OpenSSL 1.0.2h 2016 年 5 月 3 日”

最佳答案

也许您可以尝试来自 slproweb.com 的 OpenSSL 的预构建 Windows 二进制文件.此外,Qt 5.8 似乎需要 OpenSSL v1.0.2 才能正常工作。

关于c++ - 如何让 Qt 5.8 在 Windows 上使用 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44079755/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com