Russian Qt Forum
Май 17, 2024, 23:12 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Http запрос  (Прочитано 13184 раз)
tem1k
Гость
« : Январь 12, 2010, 22:02 »

Доброго времени суток, господа. Есть следующая проблема и требуется помощь.

Я пишу программу которая будет висеть в трее и периодически или по моему желанию будет проверять количество оставшихся денег на моем интернет счету. при нажатии кнопки update серверу посылается запрос:
Код:
 QHttpRequestHeader header = QHttpRequestHeader ("POST","/index.cgi");
    header.setContentType("application/x-www-form-urlencoded");
    header.setValue("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6");
    header.setValue("Host", "billing.oreol.net");
    header.setValue("Referer", "https://billing.oreol.net/index.cgi");
    header.setValue("Content-Type", "application/x-www-form-urlencoded");
    header.setValue("language","english");
    header.setValue("user", ui->cashLoginLine->text());
    header.setValue("passwd", ui->cashPassLine->text());
    header.setValue("logined", "Enter");

    http.setHost("billing.oreol.net");
    http.request(header);

на него я получаю ответ:
Код:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://billing.oreol.net/index.cgi">here</a>.</p>
</body></html>

Насколько я понимаю в браузере я бы наблюдал переадресацию... хотя может я и не прав. Хотелось бы узнать что делать дальше. В итоге мне нужно получить страничку с данными о своем аккаунте (счет, время пополнения и т.п.) Каким образом можно это сделать ? Или может я неправильно уже что-то делаю ?

Спасибо.
Записан
Dendy
Гость
« Ответ #1 : Январь 12, 2010, 22:33 »

Так всё таки, что показывает браузер?
Записан
Vass
Гость
« Ответ #2 : Январь 13, 2010, 00:52 »

Возможно стоит попробовать прокинуть сигнал sslErrors ( const QList<QSslError> & errors ) на слот ignoreSslErrors () у вашего QHttp
Записан
tem1k
Гость
« Ответ #3 : Январь 13, 2010, 01:30 »

Так всё таки, что показывает браузер?

Если вы про обычный браузер, то он показывает все правильно... А в моем случае я слотом viewbalance по сигналу done() считываю методом readAll() все с моего http и отправляю в QTextBrowser:

Код:
void Window::viewbalance()
{
    QString text = text.fromUtf8(http.readAll());
    ui->cashStatus->setPlainText(text);
}

и получаю вышеуказанную ошибку 302 Found

Записан
tem1k
Гость
« Ответ #4 : Январь 13, 2010, 01:35 »

Еще получается так что главная страница нашего биллинга такая - https://billing.oreol.net/index.cgi на ней есть форма ввода данных аторизации и т.п. Если в браузере ввести все и подтвердить страничка с данными о аккаунте имеет тот же адрес - https://billing.oreol.net/index.cgi. Может еще в этом дело...

Еще раз опишу задачу, возможно в первом посте я не достаточно ее описал, так вот мне нужно получить данные о моем интернет счету. Я посылаю http запрос (указан в первом посте) на сервер, как я понимаю он должен мне что-то ответить...
Отвечает он ошибкой 302 Found и говорит мне что мол моя страница находится по такой-то ссылке (https://billing.oreol.net/index.cgi) но переходя по этой ссылке я оказываюсь в том же месте (начале).
Записан
tem1k
Гость
« Ответ #5 : Январь 13, 2010, 01:37 »

Возможно стоит попробовать прокинуть сигнал sslErrors ( const QList<QSslError> & errors ) на слот ignoreSslErrors () у вашего QHttp

Спасибо за совет. Сечас попробую.

Updated

Все равно такой же ответ от сервера:
Код:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="https://billing.oreol.net/index.cgi">here</a>.</p>
</body></html>
« Последнее редактирование: Январь 13, 2010, 01:43 от tem1k » Записан
Dendy
Гость
« Ответ #6 : Январь 13, 2010, 09:33 »

Кстати, класс QHttp deprecated. Попробуйте использовать QNetworkAccessManager.
Записан
zenden
Гость
« Ответ #7 : Январь 13, 2010, 16:00 »

Кстати, класс QHttp deprecated. Попробуйте использовать QNetworkAccessManager.

Так говорят во всех темах, посвященным QHttp, когда собственно на вопрос ответить не могут  Улыбающийся

tem1k
смотрите сигнал  responseHeaderReceived ( const QHttpResponseHeader & resp )

Код
C++ (Qt)
void
RedirectHttp::onHeaderReceived( const QHttpResponseHeader& resp )
{
  switch( resp.statusCode() )
 {
   case 301:   //Moved Permanently
   case 302:
   case 307:   //Temporary Redirect
 {
    QString redirectUrl = resp.value( "location" );
   qDebug() << "Http request returned redirect (301, 302 or 307): " << redirectUrl;
   // blockSignals( true );
  abort();
   close();
 
 QUrl url( redirectUrl );
// повторный запрос
..
 
« Последнее редактирование: Январь 13, 2010, 16:02 от zenden » Записан
Dendy
Гость
« Ответ #8 : Январь 13, 2010, 17:00 »

Так говорят во всех темах, посвященным QHttp, когда собственно на вопрос ответить не могут  Улыбающийся

Неудивительно, потому как за работоспособность QHttp уже никто не ручается. Точно так же как и в темах про по Qt3 советуют переходить на Qt4. Одно дело поддерживать старый код, другое, когда проект пишется самостоятельно.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #9 : Январь 14, 2010, 04:14 »

Кстати, класс QHttp deprecated. Попробуйте использовать QNetworkAccessManager.

а в документации по этому поводу тишина (4.5.3). Почему-то такие интересные новости внезапно узнаёшь из форумов, а не из документации. Уже раз 10 это видел, и на форуме, и а рассылке, и а багзилле, а в документации ни слова  Злой
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3259


Просмотр профиля
« Ответ #10 : Январь 14, 2010, 18:39 »

Цитировать
The QHttp class provides an implementation of the HTTP protocol.

Код:
#include <QHttp>

This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.

This class is not part of the Qt GUI Framework Edition.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #11 : Январь 14, 2010, 18:46 »

Цитировать
The QHttp class provides an implementation of the HTTP protocol.

Код:
#include <QHttp>

This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.

This class is not part of the Qt GUI Framework Edition.

Но это только в 4.6 написали, а 4.6 есть только в bleeding edge репах (Ubuntu lucid etc.)
Записан
DOOMer
Чайник
*
Offline Offline

Сообщений: 95



Просмотр профиля
« Ответ #12 : Январь 14, 2010, 18:55 »

Цитата: Alex Custov link=topic=12026.msg75934#msg75934
Но это только в 4.6 написали, а 4.6 есть только в bleeding edge репах (Ubuntu lucid etc.)
В описании  QHttp  в доках  Qt 4.5.x уже реккомендовалось использовать вместо него в новом коде QNetworkAccessmanager.

Цитировать
This class provides a direct interface to HTTP that allows you to have more control over the requests and that allows you to access the response header fields. However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as those classes possess a simpler, yet more powerful API.

http://doc.trolltech.com/4.5/qhttp.html#details
Записан

Linux x86_64 && Qt 5.4.0 && Qt 4.8.6t && GCC 4.9.2
Dendy
Гость
« Ответ #13 : Январь 14, 2010, 19:22 »

Но это только в 4.6 написали, а 4.6 есть только в bleeding edge репах (Ubuntu lucid etc.)

Ничего не имею против установки из репозиториев, но у разработчиков как правило всё тянется тарболами с сайта задолго до выхода релиза, а тем более попадании последнего в мейнстрим (-;
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #14 : Январь 14, 2010, 19:23 »

Цитата: Alex Custov link=topic=12026.msg75934#msg75934
Но это только в 4.6 написали, а 4.6 есть только в bleeding edge репах (Ubuntu lucid etc.)
В описании  QHttp  в доках  Qt 4.5.x уже реккомендовалось использовать вместо него в новом коде QNetworkAccessmanager.

Так я же и не спорю, что рекомендовалось. Но между рекомендациями и официальным статусом "deprecated" может пройти много времени.
« Последнее редактирование: Январь 14, 2010, 19:25 от Alex Custov » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.497 секунд. Запросов: 22.