3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
1

Несколько POST/GET запросов подряд

20.03.2017, 16:58. Показов 1136. Ответов 11
Метки нет (Все метки)

Я новичок в Qt. Как сделать слот, в котором выполнится сначала один POST запрос, и только после! (а не одновременно) выполниться другой POST запрос?

Вот слот, который выполняет POST-запрос. Можно ли в нем же сделать еще один POST-запрос. Или не обязательно в слоте, главное, чтобы программа могла выполнить два запроса друг за другом при нажатии на одну кнопку.
PS: Вопрос "зачем?" прошу не задавать, ибо отвечу "надо?"

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    void NetworkManager::httpPOST() {
 
    QString username = "username";
    QString password = "password";
 
    QByteArray postData;
    postData.append("login_user="+username.toUtf8());
    postData.append("&pass_user="+password.toUtf8());
 
    QString urlText = "http://www.example.ru";
 
    QNetworkRequest request;
    request.setUrl(QUrl(urlText));
 
    m_manager.setCookieJar(&cookieJar);
    m_manager.post( request, postData );
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2017, 16:58
Ответы с готовыми решениями:

QMouseEvent, Как реализовать несколько кликов подряд?
Есть функция void Previewer::virtualClick(int x, int y) { QMouseEvent...

Несколько запросов подряд
У меня есть вот такое подключение и запрос string sql = "SELECT name, сount FROM " + table + "...

Несколько запросов подряд
Это работает, но с точки зрения "грамматики программирования" это правильно: ? SqlCommand cmd =...

Несколько get и post запросов Indy
Здравствуйте. Как сделать сразу несколько get и post запросов в idHTTP? Буду благодарен за...

11
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
20.03.2017, 17:36 2
Дожидайся завершения. Там же есть сигнал finished(). Вот когда его получишь, и делай второй запрос.
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
20.03.2017, 18:03  [ТС] 3
Цитата Сообщение от nmcf Посмотреть сообщение
Дожидайся завершения. Там же есть сигнал finished(). Вот когда его получишь, и делай второй запрос.
Я попытался это сделать, но второй запрос у меня выполняется бесконечно. Не могли бы вы показать, как это сделать
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
20.03.2017, 20:57 4
Цитата Сообщение от b00006 Посмотреть сообщение
Я попытался это сделать
Показывай.
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
20.03.2017, 21:04  [ТС] 5
Цитата Сообщение от nmcf Посмотреть сообщение
Показывай.
Что-то тип того...но это первое, что мне пришло в голову.
C++ (Qt)
1
connect( &m_manager, SIGNAL( finished( QNetworkReply* ) ), SLOT( httpGET() ) );
Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Показывай.
Я плохо понимаю принцип работы finished( QNetworkReply* ).

 Комментарий модератора 
Ставьте теги правильно!
Правила именования тем и оформления сообщений в разделе Qt
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
20.03.2017, 21:51 6
Ты отправил запрос в одной функции, затем, когда он завершится, будет вызван слот, который ты подключил к сигналу finished(). Вот этот слот и должен отправить второй запрос, но он будет вызван ещё раз после второго запроса, и нужно как-то это предусмотреть, чтобы он дальше не реагировал - флаг какой-то придумать.
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
20.03.2017, 22:23  [ТС] 7
Цитата Сообщение от nmcf Посмотреть сообщение
Вот этот слот и должен отправить второй запрос, но он будет вызван ещё раз после второго запроса, и нужно как-то это предусмотреть, чтобы он дальше не реагировал - флаг какой-то придумать.
Вот тут я и встал как раз, как я понял функция вызывает сама себя каждый раз. А как остановить ее, я не могу додуматься
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
20.03.2017, 22:28 8
Ну пусть первая функция устанавливает флаг, а слот проверяет и в зависимости от этого делает или нет второй запрос плюс сброс флага. Это при условии, что никто больше не пользуется этой подсистемой.
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
21.03.2017, 15:14  [ТС] 9
Цитата Сообщение от nmcf Посмотреть сообщение
Ну пусть первая функция устанавливает флаг, а слот проверяет и в зависимости от этого делает или нет второй запрос плюс сброс флага. Это при условии, что никто больше не пользуется этой подсистемой.
Сделал так: с виду то все хорошо (сначала выполняется POST01, потом POST02, но функция POST02 выполняется бесконечно, просто пропускается if(flag == 1)
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
void NetworkManager::POST() {
    ui->lbStatus->setText( "Working..." );
 
    QString username = "user";
    QString password = "pass";
 
    postData.clear();
    postData.append("login_user="+username.toUtf8());
    postData.append("&pass_user="+password.toUtf8());
 
    QString urlText = "http://example.ru";
 
    request.setUrl(QUrl(urlText));
    request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
 
    m_manager.setCookieJar(&cookieJar);
    m_manager.post( request, postData );
 
    flag = 1;
    connect( &m_manager, SIGNAL( finished( QNetworkReply* ) ), SLOT( onGoGET() ) );
}
 
void NetworkManager::POST02() {
    if(flag == 1)
    {
        ui->lbStatus->setText( "Working..." );
 
        QByteArray postData;
        postData.append("action=get");
 
        QString urlText = "http://example2.ru";
 
        QNetworkRequest request;
        request.setUrl(QUrl(urlText));
        request.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
 
        m_manager.setCookieJar(&cookieJar);
        m_manager.post( request, postData );
        flag = 0;
    }
}
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
21.03.2017, 15:40 10
connect() до выполнения запроса делай. И почему receiver не указан? Четыре параметра же.
flag где описан?
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
21.03.2017, 16:50  [ТС] 11
Цитата Сообщение от nmcf Посмотреть сообщение
И почему receiver не указан?
Это что?

Добавлено через 10 секунд
Цитата Сообщение от nmcf Посмотреть сообщение
flag где описан?
В заголовочном файле
0
Pied Piper
235 / 226 / 57
Регистрация: 15.01.2013
Сообщений: 855
21.03.2017, 16:54 12
Если не нужна асинхронность QNetworkAccessManager - можно реализовать обертку, которая будет это поведение скрывать. https://habrahabr.ru/post/270649/
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2017, 16:54

Несколько Ajax post запросов
Здравствуйте. Возникла одна проблема, при клике на кнопку должен отправляться post запрос на файл...

Через несколько POST-запросов всё перестаёт работать
Программа отсылает POST запросы серверу. Запросы отсылаются с помощью HttpWebRequest Для сжатия...

Explorer отправляет несколько post запросов вместо одного
Через мазилу и гуглхром работает нормально, но вот эхплорер11 почему-то шлёт по несколько запросов...

Отправка GET и POST запросов
Привет всем. Вот такой вопрос у меня: как на с++ 6 реализовать отправку GET, POST запросов....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.