QNetworkAccessManager 不适用于带有 https 的 Windows

问题描述 投票:0回答:2

我正在尝试使用

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;
}
c++ windows ssl download qt5
2个回答
1
投票

我花了一整天的时间才弄清楚如何让它发挥作用。我最终找到了答案这里

  1. 在 Qt 维护工具中选择 Qt > Developer and Designer Tools > OpenSSL 1.1.x Toolkit 并安装它
  2. .pro
    中添加以下内容
    INCLUDEPATH += C:/Qt/Tools/OpenSSL/Win_x86/include
    LIBS += -LC:/Qt/Tools/OpenSSL/Win_x86/bin -llibcrypto-1_1 -llibssl-1_1
    
  3. 使用您的程序从
    libcrypto-1_1.dll
    复制
    libssl-1_1.dll
    C:/Qt/Tools/OpenSSL/Win_x86/bin

我花了一整天的时间才找到第 1 步。


0
投票

正如ciobi所说,似乎复制这些dll就足够了 我正在下载文件,在 linux 和 windows IDE 下工作,在 IDE 之外 QNetworkReply::readAll 的长度为零 我用了reply->ignoreSslErrors();但这没有帮助

© www.soinside.com 2019 - 2024. All rights reserved.