Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Linux0id
2 / 2 / 1
Регистрация: 18.09.2013
Сообщений: 28
1

Не удается отправить POST запрос

09.01.2016, 22:29. Просмотров 384. Ответов 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
class ConnectManager : public QObject, public IRemouteCommander
{
    Q_OBJECT
 
private:
    INetworkCommander*      m_NetworkCommander;
    QThread*                       m_WorkerThread;
 
private slots:
 
    void SpeedManagerThread();
 
public:
 
    ConnectManager( );
 
    void SetMode( Modes::Modes mode );
};
 
class YotaNetwork : public QObject, public INetworkCommander
{
    Q_OBJECT
 
private:
 
    QNetworkAccessManager*          m_Network;
 
private slots:
 
    void OnRequestFinishedHandler( QNetworkReply* reply );
 
public:
 
    YotaNetwork( );
 
    bool Connect( QString login, QString password );
 
    void Reload();
};
Конструктор ConnectManager и слот потока:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ConnectManager::ConnectManager()
{
     m_NetworkCommander  = new YotaNetwork ( );
     m_NetworkCommander->Connect ( 
                                                 m_Settings.value ( "main/Login" ).toString(),
                                                 m_Settings.value ( "main/Password" ).toString() );
     
     m_WorkerThread = new QThread( this );
     connect( m_WorkerThread, SIGNAL(started()), this, SLOT(SpeedManagerThread()) );
     m_WorkerThread->start();
}
 
void ConnectManager::SpeedManagerThread()
{
   while( true )
   {
       ...
       m_WorkerThread->msleep( 1000 );
   }
}
А сам YotaNetwork::Connect и слот для обработки сигнала выглядят так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void YotaNetwork::OnRequestFinishedHandler( QNetworkReply* reply )
{
    qDebug() << "POST finished";
    reply->deleteLater();
}
 
 
bool YotaNetwork::Connect( QString login, QString password )
{
     m_Network = new QNetworkAccessManager(this);
     connect(
             m_Network, 
             SIGNAL(finished(QNetworkReply*)),
             this, 
             SLOT(OnRequestFinishedHandler(QNetworkReply*)));
 
     m_Network->get(QNetworkRequest(QUrl("http://qt.nokia.com")));
 
    return true;
}
Код урезан, но все, что нужно, выглядит именно так.
Соответственно, в main делаю:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    IRemouteCommander* Commander = NULL;
 
    try
    {
        Commander = new ConnectManager( );
        
        a.exec();
    }
    catch( QString ex )
    {
        qDebug() << "Error: " << ex;
    }
 
    if( Commander )
        delete Commander;
 
    return 0;
}
Метод YotaNetwork::Connect(...) вызывается, отладчиком встаю в нем на точку.
А вот слот YotaNetwork::OnRequestFinishedHandler не вызывается. qDebug ничего не выводит, на точку отладчик вставать не хочет.

Методом тыка выяснил, что если не вызывать m_WorkerThread->start() в конструкторе ConnectManager::ConnectManager(), то слот YotaNetwork::OnRequestFinishedHandler вызывается!

В чем может быть проблема? Не хочется использовать curl, хочется именно средствами Qt решить задачу.
Кстати, YotaNetwork в дальнейшем будет использоваться именно внутри потока. Но даже сейчас, если я вызову YotaNetwork::Connect(...) из ConnectManager::SpeedManagerThread(), обработчик не вызывается!
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2016, 22:29
Ответы с готовыми решениями:

Как отправить post запрос с куками
Собственно как это сделать?

Не удается отправить post запрос
Не могу отправить post запрос Мой код private void button1_Click(object sender, EventArgs e) ...

Не удается отправить запрос
$dbc = mysql_connect ('localhost', 'piley', '123', 'mydb') or die('Не подключилось к базе'); ...

Отправить POST запрос
Подскажите, как лучше отправить запрос с такими параметрами $header = 'POST /new/...

1
solar_wind
769 / 759 / 59
Регистрация: 06.07.2009
Сообщений: 3,016
Завершенные тесты: 1
11.01.2016, 06:58 2
Делаю вот так, все работает
C++ (Qt)
1
2
3
4
5
6
7
8
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
 
QByteArray data; данные
QNetworkRequest request;
request.setUrl(QUrl("url"));
request.setRawHeader("User-Agent", "IE");
QNetworkReply *reply = manager->post(request,data);
0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2016, 06:58

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Отправить post запрос
Как отправить простой post запрос на удаленный сервер? Сделал через наследование AsyncTask, нифига...

Отправить post запрос
В статье на хабр есть код которые отправляет запросы к Goip. (Не обязательно знать что такое Goip)...

Отправить POST запрос
Помогите уже, реально задолбался, 2 дня уже ищу рабочий код который бы отправлял пост запрос но...

Не получается отправить POST запрос
надо отправить пост запрос на php &lt;?php if(isset($_POST)){ $name1 = $_POST; $connect =...

Как отправить POST-запрос?
Парсинг + Отправка POST формы и получение результата Вот собственно вопрос, есть сайт Wmmail,...

Отправить Post запрос requests
Вот все данные и код - Я все скопировал точно так же cookie = { ...


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

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

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