Задать вопрос
@klajowski

Как обрабатывать множество запросов get в QNetworkAccessManager?

У меня есть определённое количество ссылок (больше 6) по которым я хочу получить html код этих страниц.
Причём я должен их склеивать в процесе получения. Только вот вопрос в том, как мне посылать эти запросы и как обрабатывать в слоте, чтобы я мог получить в конце страницу, которая была бы в том же порядке, что и ссылки?

Я пытаюсь делать следующее:
void MyLoader::loadPageByLinks()
{
    // links  - это QStringList
    for(const QString& link : links)
    {
        manager->get(QNetworkRequest(QUrl(link)));
    }
}


В конструкторе MyLoader:
manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyReady(QNetworkReply*)));

В replyReady():
void MyLoader::replyReady(QNetworkReply *reply)
{
     QString currentPage(reply->readAll());

     ... // делаю преобразования currentPage с помощью регулярных выражений

     finalPage.append(currentPage); // добавляю к финальной странице текущую (псевдокод)
     
}


Одно из полей класса MyLoader это законченная страница finalPage. Также, есть public-метод который возвращает эту страницу (const QString&), которую нужно будет использовать в другом классе для отображения.

Я подозреваю, что делаю всё неправильно. Ничего не приходит на ум.

Подскажите пожалуйста, как решить данную задачу. Спасибо.

p.s. я ещё совсем зелёный в программировании и многого не знаю, но сроки поджимают и нужно решить задачу как можно быстрее.
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
IGHOR
@IGHOR Куратор тега Qt
Qt/C++ DEV/CTO
get( и post( возвращают ссылку на QNetworkReply, который приходит в ответе.
Можете к нему использовать setProperty задавая свои значения.
Таким образом можете идентифицировать на какой запрос пришел ответ.
Порядок ответов при множественных запросах может быть разный, так как QNetworkAccessManager использует 4 подключения одновременно.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы