Qt и HTTP скачать - PullRequest
       1

Qt и HTTP скачать

1 голос
/ 26 сентября 2010

Я работаю над классом, который будет реализовывать клиент для определенного протокола обмена мгновенными сообщениями.
Мне нужно сначала сделать HTTP-запрос, затем прочитать данные и сделать еще один HTTP-запрос с обработанными данными, полученными из первого запроса, и только после второго запроса я могу открыть tcp-сокет для сервера. Каков наилучший способ (лучший способ QT?) Сделать это, так как я не нашел способа заблокировать, пока не закончится HTTP-запрос. Я рассматривал возможность использования libcurl для этой части, но использование другой библиотеки только для этого кажется излишним.

1 Ответ

1 голос
/ 26 сентября 2010

QHttp отправит набор сигналов для уведомления о состоянии запроса. Например, вы можете подключить сигнал requestFinished() к слоту, который будет обрабатывать его и запустить второй запрос.

Идея в псевдо-QT

//possibly in constructor
connect(myHttp, SIGNAL(requestFinished(int, bool)), 
        this, SLOT(requestHandler(int, bool)))


//first call somewhere
firstReqId = myHttp->get("first.com", buff);

void requestHandler(int id, bool error)
{
     if (error)
        panic();
     if(id == firstReqId) {
         process(buff);
         secondReqId = myHttp->get("second.com", buff2);
     }
     if (id == secondReqId) {
         process(buff2);
         sock.connectToHost("server.com", "5222"); //etc
     }
}

Или в качестве другого решения вы можете разумно использовать структуры блокировки, такие как QMutex, и обернуть QHttp, реализовав собственный метод запроса блокировки, который будет разрешать один запрос за раз. Но я думаю, что в вашем случае первый подход лучше.

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