Russian Qt Forum

Qt => Вопросы новичков => Тема начата: tall32 от Октябрь 21, 2012, 09:17



Название: Программно нажать кнопку в браузере
Отправлено: tall32 от Октябрь 21, 2012, 09:17
Доброго времени суток.

Необходимо программно, грубо говоря лазить по одному сайту. Что бы скачивать от туда файлы.
Сайт с авторизацией.

Не подскажите в какую сторону мне "смотреть")))или скажите есть ли где нибудь примеры))..

В заранее спасибо...


Название: Re: Программно нажать кнопку в браузере
Отправлено: Bepec от Октябрь 21, 2012, 09:27
QNetworkAccessManager.

А так же вики с описанием сетевых технологий, авторизации, идентификации и технологии доступа.

Тема довольно обширная.

PS если делать "отвали", то должно хватить QWebView и JavaScript.


Название: Re: Программно нажать кнопку в браузере
Отправлено: tall32 от Октябрь 21, 2012, 09:34
Ок) спасибо))...буду копать в ту сторону..


Название: Re: Программно нажать кнопку в браузере
Отправлено: tall32 от Октябрь 21, 2012, 20:43
вроде бы чуть , чуть разобрался с QNetworkAccessManager.
вопрос что я делаю не так?

Код:
..........
    QNetworkAccessManager manager;
    QNetworkReply *reply;
    QUrl apiUrl;
    QByteArray requestString;
..........
    apiUrl = "http://localhost/index.php";

    requestString = "n=1111";

    QNetworkRequest request(apiUrl);

    reply = manager.post(request,requestString);

    connect(reply, SIGNAL(finished()),this, SLOT(getReplyFinished()));
    connect(reply, SIGNAL(readyRead()),this, SLOT(readyReadReply()));

.................
файл 'index.php'
 
Код:
<?php
    echo $_POST['n'];
?>

что я делаю не так?

если отправлять запрос через "GET" то он успешно доходит, а через "POST"
вообще ни как(((...


Название: Re: Программно нажать кнопку в браузере
Отправлено: Bepec от Октябрь 21, 2012, 22:06
Могу завтра посмотреть, но ничего не обещаю. Я с сетью дел особых не имею, мне больше RS-485 по душе :)


Название: Re: Программно нажать кнопку в браузере
Отправлено: ecspertiza от Октябрь 21, 2012, 22:39
странно что get доходит :) можешь скинуть побольше кода ? Если у тебя так выглядит функция как у тебя написана, то по выходу из нее QNetworkAccessManager будет уничтожен, и по идее соединение должно будет отвалиться. Еще интересно как ответ выводишь.


Название: Re: Программно нажать кнопку в браузере
Отправлено: tall32 от Октябрь 22, 2012, 04:23

заголовочный файл:
Код:
.......................................
private slots:
    void getReplyFinished();
    void readyReadReply();
private:
    QNetworkAccessManager manager;
    QNetworkReply *reply;
    QUrl apiUrl;
    QByteArray requestString;
.......................................

не заголовочный файл)...
Код:
.......................................
    apiUrl = "http://localhost/index.php";
    requestString = "n=1111";

    QNetworkRequest request(apiUrl);
    reply = manager.post(request, requestString);

    connect(reply, SIGNAL(finished()),this, SLOT(getReplyFinished()));
    connect(reply, SIGNAL(readyRead()),this, SLOT(readyReadReply()));
..........................................
void MainWindow::getReplyFinished()
{
    reply->deleteLater();

    QByteArray data;
    data = reply->readAll();
    ui->webView->setHtml(data);
}


Название: Re: Программно нажать кнопку в браузере
Отправлено: Bepec от Октябрь 22, 2012, 06:58
ecspertiza, а почему он должен отвалиться? У него же остаётся указатель на QNetworkReply. И он по идее не даёт умереть QNAM'у, ибо ссылка на него жива в его нутрях?

PS прошу прочитать и обсудить :) Возможно я и ошибаюсь.


Название: Re: Программно нажать кнопку в браузере
Отправлено: ecspertiza от Октябрь 22, 2012, 09:11
ecspertiza, а почему он должен отвалиться? У него же остаётся указатель на QNetworkReply. И он по идее не даёт умереть QNAM'у, ибо ссылка на него жива в его нутрях?

PS прошу прочитать и обсудить :) Возможно я и ошибаюсь.

ну у меня на то было две причины, первое это для того что бы разорвать коннект я всегда вызываю delete qnam и там уже все равно есть ссылка или нет )))) Во вторых даже если ссылка на объект и была, то по выходу из ф-ции объект должен будет удалиться и ссылка будет не валидна вроде как, если я ничего не путаю. Но благо у автора не так как я думал, у него QNam вместе с классом создается.

это офф топик )) теперь по вопросу автора, утром на светлую голову я вспоминаю формат пост запроса и понимаю что он не верный, вот в $_POST ничего и не приходит. Тебе придеться или руками формировать тело пост запроса, посмотри на википедии например как оно выглядет или использовать QHttpMultiPart если у тебя Qt >= 4.8


Название: Re: Программно нажать кнопку в браузере
Отправлено: tall32 от Октябрь 22, 2012, 11:00
спасибо)
сегодня попробую сделать))...