我正在尝试使用
https
中的以下代码通过我的应用程序从 Qt5
网址下载文件。这在 Linux 上完美地工作,正如我想要的,但在 Windows 版本中 content
始终为空,因此抛出异常。
根据评论和研究,它似乎与
SSL
有关
void FileDownloader::download(QString url, QString dest)
{
QNetworkAccessManager manager;
QNetworkReply *response = manager.get(QNetworkRequest(QUrl(url)));
QEventLoop event;
connect(response, SIGNAL(finished()), &event, SLOT(quit()));
event.exec();
QByteArray content = response->readAll();
if (content.isEmpty())
throw std::logic_error((QString("Impossible to download url : ") + url).toStdString());
QSaveFile file(dest);
file.open(QIODevice::WriteOnly);
file.write(content);
file.commit();
return;
}
我花了一整天的时间才弄清楚如何让它发挥作用。我最终找到了答案这里。
.pro
中添加以下内容
INCLUDEPATH += C:/Qt/Tools/OpenSSL/Win_x86/include
LIBS += -LC:/Qt/Tools/OpenSSL/Win_x86/bin -llibcrypto-1_1 -llibssl-1_1
libcrypto-1_1.dll
复制 libssl-1_1.dll
和 C:/Qt/Tools/OpenSSL/Win_x86/bin
我花了一整天的时间才找到第 1 步。
正如ciobi所说,似乎复制这些dll就足够了 我正在下载文件,在 linux 和 windows IDE 下工作,在 IDE 之外 QNetworkReply::readAll 的长度为零 我用了reply->ignoreSslErrors();但这没有帮助