Как получить правильную длину файла http с помощью qt? - PullRequest
0 голосов
/ 04 июля 2018

Я хочу получить URL "https://iso.mirrors.ustc.edu.cn/qtproject/archive/qt/5.11/5.11.1/qt-opensource-windows-x86-5.11.1.exe" длина файла с Qt,

но запрос QNetworkAccessManager не может получить Content-Length。 содержимое равно

<html><head><script>document.cookie="addr=113.57.128.130";setTimeout("location.reload();", 2);</script></head><body>This page requires JavaScript. Please wait 2 seconds.
</body></html>

если я добавлю cookie="addr=113.57.128.130" к запросу вручную, я могу получить правильные данные。 что мне делать, чтобы получить длину файла?

1 Ответ

0 голосов
/ 04 июля 2018

Попробуйте этот пример:

widget.h

public:
    void requestFileSize(const QString &url);
    QNetworkAccessManager *m_netmanager;
    QNetworkReply *m_reply;

public slots:
    void fileSize();

widget.cpp

void Widget::requestFileSize(const QString &url)
{
    QNetworkRequest req;
    m_netmanager = new QNetworkAccessManager(this);
    req.setUrl(QUrl(url));
    m_reply = m_netmanager->get(req);
    connect(m_reply, SIGNAL(metaDataChanged()), this, SLOT(fileSize()));
}

void Widget::fileSize()
{
    qDebug() << "Content Length: " << m_reply->header(QNetworkRequest::ContentLengthHeader).toString();
    m_reply->deleteLater();
    m_netmanager->deleteLater();
}

Теперь звоните:

requestFileSize("https://as5.cdn.asset.aparat.com/aparat-video/c6f1e63e310060e70574f1692c2322395584619-360p__37462.mp4");

Вывод в байтах:

Content Length:  "12186677"

А это примерно 11.6 MB

Я проверяю это с некоторыми url с, но я не знаю, почему с этим url https://iso.mirrors.ustc.edu.cn/qtproject/archive/qt/5.11/5.11.1/qt-opensource-windows-x86-5.11.1.exe всегда возвращают 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...