Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Сеть в QT растолкуйте...


Автор: LionMdS 26.3.2011, 18:52
Есть самый простой код который загружает страницу из инета в файл:

Код

void MainWindow::on_pushButton_clicked()
{
    file.setFileName("temp");
    h.setHost("vk.com");
    h.get("/", &file);
    file.close();
    h.closeConnection();
}


Пытаюсь подетальнее во всём разобратся, 
1) если мне надо вывести текст страници не в файл а в textEdit?
2) как получить header запроса, и вообще какуюто инфу о нём?
3) как задать строку идентификации браузера?

Заранее спасибо за помощь!

Автор: bsa 26.3.2011, 23:59
LionMdS, так как я не работал с сетью в Qt, то не могу определить тип объекта h. Поэтому, могу только посоветовать использовать вместо file объект типа QBuffer

Автор: LionMdS 27.3.2011, 01:27
Заголовочный фал:

Код

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();
    void done(bool);
    void requestFinished(int, bool);

private:
    Ui::MainWindow *ui;
    QFile file;
    QHttp h;
    QUrl u;
};


Автор: borisbn 27.3.2011, 02:07
Цитата из документации по 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 provides a direct interface to HTTP that allows you to download and upload data with the HTTP protocol. However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as those classes possess a simpler, yet more powerful API and a more modern protocol implementation.

Автор: LionMdS 27.3.2011, 02:53
спс щас попробую, я просто по книге учусь, она походу немного устарела..

Автор: borisbn 27.3.2011, 02:56
LionMdS, там с этими QNetworkAccessManager и QNetworkReply не так всё тривиально, но, всё-таки, правильнее будет ими пользоваться, а не obsolete-классами

Автор: LionMdS 27.3.2011, 14:17
Цитата(LionMdS @ 26.3.2011,  18:52)
1) если мне надо вывести текст страници не в файл а в textEdit?
2) как получить header запроса, и вообще какуюто инфу о нём?
3) как задать строку идентификации браузера?

А как нсчёт основных вопросов?

Автор: borisbn 27.3.2011, 14:35
Цитата(LionMdS @  27.3.2011,  14:17 Найти цитируемый пост)
1) если мне надо вывести текст страници не в файл а в textEdit?

bsa, ж подсказал - QBuffer

Цитата(LionMdS @  27.3.2011,  14:17 Найти цитируемый пост)
как получить header запроса, и вообще какуюто инфу о нём?

вообще-то header формируешь ты. нет ?

Цитата(LionMdS @  27.3.2011,  14:17 Найти цитируемый пост)
как задать строку идентификации браузера?

там же в заголовке запроса.

http://doc.qt.nokia.com/latest/qnetworkrequest.html#setHeader

Автор: LionMdS 27.3.2011, 15:41
Цитата(borisbn @  27.3.2011,  14:35 Найти цитируемый пост)
вообще-то header формируешь ты. нет ?


да, я имею ввиду хедер ответа...

за остальное спасибо!

Автор: LionMdS 27.3.2011, 18:02
Код

void MainWindow::on_pushButton_clicked()
{
    QNetworkAccessManager *man = new QNetworkAccessManager(this);
    connect(man, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
    QNetworkRequest requset;
    request.setUrl(QUrl("http://vk.com"));
    request.setRawHeader("User-agent", "MyBrowser 1.0");
    man->get(request);
}

void MainWindow::replyFinished(QNetworkReply *reply)
{
    ui->textEdit->setText("DONE!");
}


Что я не правильно делаю, как извлеч инфу из reply?

Автор: bsa 27.3.2011, 18:24
LionMdS, думаю, http://doc.qt.nokia.com/4.7/qnetworkreply.html

Автор: LionMdS 27.3.2011, 19:26
Код

void MainWindow::on_pushButton_clicked()
{
    QNetworkAccessManager *man = new QNetworkAccessManager(this);
    QNetworkRequest request;
    request.setRawHeader("User-Agent", "MyBrowser v1.0");
    request.setUrl(QUrl("http://www.google.com.ua"));
    reply = man->get(request);
    connect(reply, SIGNAL(finished()), this, SLOT(getReplyFinished()));
    connect(reply, SIGNAL(readyRead()), this, SLOT(readyReadReply()));
}

void MainWindow::getReplyFinished()
{
    reply->deleteLater();
}

void MainWindow::readyReadReply()
{
    ui->textEdit->setHtml(QString(reply->readAll()));
}



вобщем разобрался почти со всем.

остался последний вопрос: как изьять header из ответа?

Код

 ui->textEdit->setHtml(QString(reply->readAll())); //как вместо содержимого страицы получить header?

Автор: bsa 27.3.2011, 21:20
Цитата(LionMdS @  27.3.2011,  19:26 Найти цитируемый пост)
остался последний вопрос: как изьять header из ответа?
Читай мой пост выше

Автор: LionMdS 27.3.2011, 22:06
я пробовал, не выходит у меня...
можно пример?

Автор: bsa 28.3.2011, 10:57
Цитата(LionMdS @  27.3.2011,  22:06 Найти цитируемый пост)
я пробовал, не выходит у меня...

Что именно пробовал?
Код
QList<RawHeaderPair> header = reply->rawHeaderPairs();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)