使用身份验证代理后面的Qt通过HTTPS下载文件

时间:2015-04-20 16:16:58

标签: qt https download

我正在尝试使用Qt 4.8下载通过HTTPS URL公开提供的文件。我是公司认证代理(我无法控制)的背后。

我正在使用QNetworkAccessManager,如下所示:

bool FileDownloader::download(const QString& fileUrl, const QString& fileName)
{
    QString outputFileName = fileName.isEmpty() ? fileNameFromUrl(fileUrl) : fileName;

    _file.setFileName(outputFileName);
    _file.open(QIODevice::WriteOnly);

    QUrl url(fileUrl);

    QNetworkReply* pReply = _networkAccessManager.get(QNetworkRequest(url));
    pReply->ignoreSslErrors();

    connect(pReply, SIGNAL(finished()), _pEventLoop, SLOT(quit()));
    connect(pReply, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
    connect(pReply, SIGNAL(sslErrors(const QList<QSslError>&)), this, SLOT(onSslErrors(const QList<QSslError>&)));
    connect(pReply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(onError(QNetworkReply::NetworkError)));

    _pEventLoop->exec();

    return true;
}

只要我致电QNetworkAccessManager::get()并收到QNetworkReply个对象,我就会docs中提到的sslErrors信号连接。按照相同的文档,我也在连接到该信号的插槽中调用ignoreSslErrors()

void FileDownloader::onSslErrors(const QList<QSslError>& sslErrors)
{
    QNetworkReply* pReply = (QNetworkReply*)(sender());
    pReply->ignoreSslErrors(sslErrors);
}

但是,我从未收到sslErrors信号,我总是收到一个error信号,我正在onError位置处理,并且总是说:

  

SSL握手失败

我正在调用下载功能:

FileDownloader fileDownloader;
fileDownloader.setProxy("http://username:password@proxyserver:8080");
fileDownloader.download(
        "https://679cc07dd5c2e4623d32-c8530501a6bee9a6c1860bbdab5cb6f1.ssl.cf2.rackcdn.com/9807/05377d04583309a88e808df5a1758e4e.png",
        "f:\\temp\\test.png"

我不想使用像libcurl这样的其他库,因为我不想引入依赖项。

那么如何使用Qt通过HTTPS下载文件?

0 个答案:

没有答案