Russian Qt Forum

Qt => Работа с сетью => Тема начата: bigory от Октябрь 16, 2010, 21:39



Название: Вытащить строку со страницы инета
Отправлено: bigory от Октябрь 16, 2010, 21:39
Всем дброе время суток!
Мне нужно выташить IP, который выводится с помощью скрипта www.grio.ru/myip.php
Как эту строчку поместить в объект Label?

Еще бы не плохо узнать как HTML записать в строковую переменную


Название: Re: Вытащить строку со страницы инета
Отправлено: bigory от Октябрь 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);


Название: Re: Вытащить строку со страницы инета
Отправлено: BRE от Октябрь 17, 2010, 07:28
но почему-то строка пустая
Потому что нужно дождаться получения данных со страницы.


Название: Re: Вытащить строку со страницы инета
Отправлено: bigory от Октябрь 17, 2010, 07:51
Поставить задержку? Как граммотнее будет ее поставить?


Название: Re: Вытащить строку со страницы инета
Отправлено: BRE от Октябрь 17, 2010, 08:08
Поставить задержку? Как граммотнее будет ее поставить?
Можно просто дождаться сигнала done, а после этого прочитать все что прислали.
И наверное стоит уходить от QHttp и использовать QNetworkAccessManager.


Название: Re: Вытащить строку со страницы инета
Отправлено: bigory от Октябрь 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*)
{
   
}


Название: Re: Вытащить строку со страницы инета
Отправлено: BRE от Октябрь 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;
}
 


Название: Re: Вытащить строку со страницы инета
Отправлено: bigory от Октябрь 17, 2010, 09:49
Спасибо Вам, очень помогли!