Название: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: AlphaGh0St от Март 22, 2011, 00:45 Всем привет!
Я новичёк, по этому заранее извиняюсь, если подобная тема уже поднималась и проблема была решена. Если же нет, помогите, пожалуйста, разобраться. Суть проблемы в том, что мне необходимо вручную формировать и отправлять GET/POST запросы через QWebView, и через него-же получать ответ. Я гуглил по этой теме, советуют работать через классы QHttp, QHttpHeader, QHttpRequestHeader и QNetworkAccessManager...но...что-то не то... Хотелось бы, чтобы всё выглядело следующим образом: по нажатию кнопки, заранее составленный запрос шёл через QWebView на указанный сервер, и ответ на запрос так-же возвращался в QWebView в качестве страницы. Почему вся работа должна идти через QWebView? Потому, что он умеет хранить куки, а это очень кстати. И на много лучше видеть ответ на свой запрос в качестве странички в самом WebView'e. ...хм...вот например: Перехожу по ссылке http://127.0.0.1/script.php. В форме скрипта задаю какое-либо числовое значение -> жму на кнопку -> скрипту идёт POST запрос с указанным числом -> выполняется какой-либо расчёт -> выдаётся результат. Нужно автоматизировать этот процесс. Чтобы по нажатию кнопки в Qt приложении, запрос формировался и отсылался автоматически, опять же через QWebView. Заранее спасибо. Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: serg_hd от Март 22, 2011, 00:54 QNetworkCookieJar* QNetworkAccessManager::cookieJar() const
void QNetworkAccessManager::setCookieJar(QNetworkCookieJar* cookieJar) никаких qwebview тут нет Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: merke от Март 22, 2011, 17:10 Использовать QNetworkAccessManager
Полученные данные скармливать QWebView Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: AlphaGh0St от Март 23, 2011, 00:30 А можно подробнее, как это реализовать?
Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: Denjs от Март 23, 2011, 03:58 Возможно будет полезно :
http://www.prog.org.ru/topic_15336_0.html - как пример того как работать с http-запросами. Если мне не изменяет память - там есть и кукисы в числе прочего. QHttp объявлен как не рекомендуемый к использованию (см ассистант) . Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: AlphaGh0St от Март 23, 2011, 19:17 Просто отправлять запросы получалось:
Например с помощью QNetworkRequest (request), QNetworkAccessManager (manager) и QNetworkReply (*reply): request.setUrl(QUrl("http://127.0.0.1/script.php?do=add")); reply = manager.post(request, "var2=on"); До этого пробовал отправлять запросы через QHttp: http->setHost("127.0.0.1"); http->request(header); Писали, что этот класс не может работать с куками. В лог файле, который ведёт скрипт отражено, что запросы проходят успешно. Но это не совсем то, что нужно. Вот уже неделю мучаюсь, ну как отправить запрос именно через QWebView и на него же принять ответ... Да, я находил примеры отправки запросов, но нигде не видел ничего о том, чтобы вся работа шла через QWebView. ---------------------------------- Александр, Вы писали: - Использовать QNetworkAccessManager - Полученные данные скармливать QWebView Можно подробнее, как это реализовать? Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: Denjs от Март 23, 2011, 20:53 AlphaGh0St, вы мои примеры разбирали? там есть получение данных от http-сервера. В QString перевести эти данные не составит большого труда.
Потом делаете QWebView::setHtml(), . Вы вообще описание класса QWebView в ассистанте читали? Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: AlphaGh0St от Март 23, 2011, 22:29 Ну разумеется, документацию читал и пример просматривал.
Всё к одному сводится... Вот к примеру этот код: QNetworkAccessManager manager; QNetworkRequest request; QNetworkReply *reply; QByteArray data; request.setUrl(QUrl("http://127.0.0.1/script.php?do=add")); reply = manager.post(request, "var1=on"); data = reply->readAll(); //QString dataString(data); ui->label->setText("bytes send: " + data.size()); ui->webView->setHtml(data); Он отправляет запрос, запрос проходит. Но, видимо где-то я ошибся, т.к. в data ничего нет. Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: Denjs от Март 24, 2011, 00:27 Плохо, значит, читали. Или далеко не всё.
Cтатья Home>>Modules>>QtNetwork>>QNetworkAccessManager. Первый же пример кода в этой статье - Код: QNetworkAccessManager *manager = new QNetworkAccessManager(this); а описание метода get() - так вообще говорит вам об этом явно: Цитировать ...returns a new QNetworkReply object opened for reading which emits the readyRead() signal whenever new data arrives. т.е. пока нет readyRead() - то и данных тоже нет никаких().В вашем коде, вы не дожидаетесь ответа сервера, и сразу же пытаетесь что то читать. QNetworkReply - он ещё ОЧЕНЬ ПУСТОЙ в момент когда вы ему говорите readAll(). Запрос ещё может даже и не дошел до сервера в этот момент и стоит где-нибудь в недрах перегруженного маршрутизатора... или php только-только начинает разбирать http-заголовок того что вы ему там прислали.... а вы тут уже рвать и метать готовы. Сеть не так быстро работает, как процессор команды перебирать умеет... Вот дождитесь от него сигнала QNetworkReply::readyRead() - и уже потом подумывайте о том, что бы что-нибудь почитать их него. А ещё лучше - дождитесь сигнала QNetworkAccessManager::finished() - как в примере кода сверху. Название: Re: Отправка GET/POST запросов и приём ответа через QWebView Отправлено: AlphaGh0St от Март 24, 2011, 23:26 С ответом от сервера вопрос решён.
Пока поэкспериментирую немножко. Спасибо за помощь! |