我正在尝试使用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下载文件?