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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Получение информации с сайта  (Прочитано 8684 раз)
Pixel
Гость
« : Май 18, 2013, 19:43 »

нужно тупо считать все что на сайте написано. вроде как все правильно делаю, но почему на всех сайтах выдает либо ошибку чтения либо вообще ничего никак непойму.
mainWindow.h:
Код:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QUrl>
#include <QtNetwork>
#include <QDebug>

class mainWindow: public QMainWindow
{
    Q_OBJECT

public:
    mainWindow();

private:
    QPushButton *btn;

private slots:
    void searshFinished(QNetworkReply*);
    void sendRequest();
};

#endif // MAINWINDOW_H

mainWindow.cpp:
Код:
#include <mainWindow.h>

mainWindow::mainWindow()
{
    btn = new QPushButton("go", this);
    connect(btn, SIGNAL(clicked()),this, SLOT(sendRequest()));
}

void mainWindow::sendRequest()
{   
    QNetworkAccessManager *manager = new QNetworkAccessManager(this);
    manager->get(QNetworkRequest(QUrl("http://www.youtube.com/")));
    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(searshFinished(QNetworkReply*)));
}

void mainWindow::searshFinished(QNetworkReply* networkReply)
{
    if (!networkReply->error()) {
        QString data = QString::fromUtf8(networkReply->readAll());
        qDebug() << data;
    }else qDebug() << "error";

}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Май 18, 2013, 20:43 »

попробуй connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(searshFinished(QNetworkReply*))); поставить перед manager->get(QNetworkRequest(QUrl("http://www.youtube.com/"))); и не плоди тонну QNetworkAccessManager'ов — у тебя на каждое нажатие кнопки создается новый объект.

и повыводи ответ вне зависимости от наличия ошибки.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Pixel
Гость
« Ответ #2 : Май 18, 2013, 20:56 »

все попробовал. безрезультатно
Записан
thechicho
Гость
« Ответ #3 : Май 19, 2013, 09:36 »

http://www.prog.org.ru/topic_24772_0.html
в этой теме выкладывал функции, которые я юзаю для работы с сетью. они могут решить твою проблему.
вообще подумай нужен ли тебе c++/qt для твоей задачи. это мозгоделание еще то, пока не поймешь как оно работает.
Записан
keekdown
Гость
« Ответ #4 : Май 19, 2013, 12:07 »

Моё мнение что ошибка в     
Цитировать
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(searshFinished(QNetworkReply*)));
проверь на null.Я не работал  с сетью,просто такое мнение
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #5 : Май 19, 2013, 14:31 »

интересно что тут может быть null. если менеджер, то программа бы вылетела при вызове метода гет; если коннект вернет фолс, то об этом сообщится в выводе приложения.

код у тебя правильный, это что-то ютьюб выделывается. потесть на другом сайте.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Pixel
Гость
« Ответ #6 : Май 19, 2013, 15:36 »

тестил очень многие сайты. ответил только google.com и то вывел нечто невнятное
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #7 : Май 19, 2013, 17:05 »

Примерно так должен выглядеть запрос, что б ему отвечали приличные сайты
Код
C++ (Qt)
   QNetworkRequest request(url);
   request.setRawHeader("Host", "XXX.uz.gov.ua");
   request.setRawHeader("User-Agent", "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0");
   request.setRawHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
   request.setRawHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
   request.setRawHeader("Accept-Encoding", "deflate");
   request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
   request.setRawHeader("Referer", "http://XXXXX.uz.gov.ua/ru/");
   request.setRawHeader("Connection", "keep-alive");
   request.setRawHeader("Pragma", "no-cache");
   request.setRawHeader("Content-Length", "0");
 
   QNetworkReply* reply = accessManager_->get(request);
   connect(reply, SIGNAL(finished()), this, SLOT(finishLoadCities()));
 
Записан
Serr500
Гость
« Ответ #8 : Май 19, 2013, 17:12 »

Вот простенький работающий проект. Ошибок не выдаёт.
Записан
thechicho
Гость
« Ответ #9 : Май 19, 2013, 20:59 »

request.setRawHeader("Accept-Encoding", "deflate");
а чем ответ разархивировать будешь, если в deflate придет?

request.setRawHeader("Host", "XXX.uz.gov.ua");
request.setRawHeader("Pragma", "no-cache");
request.setRawHeader("Content-Length", "0");
нафик не надо. для пост запроса Content-Length автоматически формируется

request.setRawHeader("Content-Type", "application/x-www-form-urlencoded");
для пост-запроса. для простой формы. для гет-запроса не нужен(в большинстве случаев). теоретически может вызвать проблемы
Записан
Pixel
Гость
« Ответ #10 : Май 19, 2013, 23:38 »

thechicho, напиши плз как надо тогда? и если не c++/qt что тогда? плагин для браузера? придется же тонну литературы перечитать.
Записан
thechicho
Гость
« Ответ #11 : Май 20, 2013, 09:31 »

а чо за прогу ты хочешь на youtube написать? накрутчик?
Записан
Pixel
Гость
« Ответ #12 : Май 20, 2013, 17:28 »

ютюб был пример. мне нужно считывать данные из таблицы на сайте. и далее проводить с ними операции. с сишником и qt проблем никаких нету, но вот как именно считать эти данные я не знаю
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #13 : Май 20, 2013, 17:54 »

ютюб был пример. мне нужно считывать данные из таблицы на сайте. и далее проводить с ними операции. с сишником и qt проблем никаких нету, но вот как именно считать эти данные я не знаю
В своем любимом браузере открываешь расширение для разработчиков  и смотришь какие запросы отправляются, какие ответы приходят. Потом аккуратненько переносиш все в Qt/c++.
Записан
thechicho
Гость
« Ответ #14 : Май 20, 2013, 18:11 »

//с сишником и qt проблем никаких нету, но вот как именно считать эти данные я не знаю
в смысле не знаешь? ты же сам писал
QString data = QString::fromUtf8(networkReply->readAll());
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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