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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вытащить строку со страницы инета  (Прочитано 4663 раз)
bigory
Гость
« : Октябрь 16, 2010, 21:39 »

Всем дброе время суток!
Мне нужно выташить IP, который выводится с помощью скрипта www.grio.ru/myip.php
Как эту строчку поместить в объект Label?

Еще бы не плохо узнать как HTML записать в строковую переменную
« Последнее редактирование: Октябрь 16, 2010, 23:18 от bigory » Записан
bigory
Гость
« Ответ #1 : Октябрь 16, 2010, 23:08 »

Мои попытки, но почему-то строка пустая
Код:
   QBuffer buffer;
    m_pHttp = new QHttp();
    m_pHttp->setHost("www.grio.ru");
    m_pHttp->get("/myip.php", &buffer);
    QString str = QString( buffer.buffer() );
    ui->label->setText(str);
« Последнее редактирование: Октябрь 16, 2010, 23:18 от bigory » Записан
BRE
Гость
« Ответ #2 : Октябрь 17, 2010, 07:28 »

но почему-то строка пустая
Потому что нужно дождаться получения данных со страницы.
Записан
bigory
Гость
« Ответ #3 : Октябрь 17, 2010, 07:51 »

Поставить задержку? Как граммотнее будет ее поставить?
« Последнее редактирование: Октябрь 17, 2010, 08:03 от bigory » Записан
BRE
Гость
« Ответ #4 : Октябрь 17, 2010, 08:08 »

Поставить задержку? Как граммотнее будет ее поставить?
Можно просто дождаться сигнала done, а после этого прочитать все что прислали.
И наверное стоит уходить от QHttp и использовать QNetworkAccessManager.
« Последнее редактирование: Октябрь 17, 2010, 08:14 от BRE » Записан
bigory
Гость
« Ответ #5 : Октябрь 17, 2010, 08:57 »

Никогда с QNetworkAccessManager не сталкивался. Как правильно дополнить код? Как передать значение в буфер или напрямую в str?

Код:
    QBuffer buffer;
    QNetworkAccessManager *m_pHttp = new QNetworkAccessManager(this);
    connect(m_pHttp, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
    m_pHttp->get(QNetworkRequest(QUrl("http://www.grio.ru/myip.php")));
    // m_pHttp.get("/myip.php", &buffer);
    //SIGNAL(done(bool));
    QString str = QString( buffer.buffer() );
    str = QString( buffer.buffer() );
    ui->label->setText(str);
    buffer.close();
}

void MainWindow::replyFinished(QNetworkReply*)
{
   
}
Записан
BRE
Гость
« Ответ #6 : Октябрь 17, 2010, 09:20 »

Пишу прямо здесь, поэтому могут быть опечатки, но идея должна быть понятна.
Код
C++ (Qt)
QString get()
{
QNetworkAccessManager manager;
QNetworkReply *reply = manager.get( QNetworkRequest( QUrl( "http://www.grio.ru/myip.php" ) ) );
 
// Запускаем цикл обработки событий и ожидаем заверщение запроса
QEventLoop loop;
QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
loop.exec();
 
// Проверяем состояние ответа
if( reply->error() != QNetworkReply::NoError )
return QString(); // Ошибка - возвращаем пустую строку
 
// Читаем полученные данные в data
QByteArray data = reply->readAll();
 
// Разбираем полученные данные, находим свой ip и возвращаем его
// ...
return strIP;
}
 
Записан
bigory
Гость
« Ответ #7 : Октябрь 17, 2010, 09:49 »

Спасибо Вам, очень помогли!
« Последнее редактирование: Октябрь 17, 2010, 12:38 от bigory » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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