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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение любой http страницы  (Прочитано 6062 раз)
NickSergeev
Гость
« : Сентябрь 03, 2013, 21:06 »

Весь день промучился с получением html кода страницы, так и не получилось сделать универсального решения. Делал всё это посредством QNetworkAccessManager, очень похоже что запрещает удалённый сервер таким образом получать исходный код страницы, тестировал на нескольких сайтах. Поэтому пришёл на форум за помощью, задача следующая:

реализовать QT класс, в конструкторе которого задаётся нужная страница ( например: http:\\google.com ), и есть метод с помощью которого можно получать html содержимое этой страницы полностью.

Тестировал на сайтах по спортивной тематике: football-lineups.com, marathonbet.com, 24score.com, везде у меня содержимое страницы урезалось, а на последнем вообще возвращалось ""

Чтобы как - то простимулировать, обещаю награду в 500 рублей за такую реализацию. Это помимо того, что поможете очень хорошему человек)) Тестировать буду на этих сайтах, которые приводил выше
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Сентябрь 03, 2013, 22:04 »

все 3 сайта у меня загружаются без всяких проблем через QNetworkAccessManager, ничего не обрезается. проверял этим: http://www.prog.org.ru/index.php?topic=18530.msg124691#msg124691 переделать под то, что ты хочешь, можно за 5 минут.
Записан

Изучением 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
BuRn
Гость
« Ответ #2 : Сентябрь 03, 2013, 22:47 »

В интернете примеров куча. Ваш код увидеть можно ? У меня тоже периодически возникает проблема с получением кода страницы на определенный сайт, но это уже проблема связанная с блокировкой и баном моего адреса. На компиляцию не проверял, но будет что - то типа :
Код:
class DownloadPage:QObject
{
Q_OBJECT
private slots:
   replyFinished(QNetworkReply* reply){
   if(reply->error()==QNetworkReply::NoError)
   {
      html = QString(reply->readAll());
      emit EndLoad(html);
   }
   else
     qDebug()<<"Error load page";
  
}
signals:
void EndLoad(QString);
public:
    DownloadPage(QUrl _url){
    url = _url;
    manager = new QNetworkAccessManager(this);
    connect(manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));
    manager->get(QNetworkRequest(url));
}
private:
  QNetworkAccessManager *manager ;
  QString html;
  
};
Далее просто создаете объект, передав ему QUrl нужной страницы и вешаете обработчик на этот объект типа :
Код:
DownloadPage *d = new DownloadPage(QUrl("http://google.com"));
connect(d,EndLoad(QString),this,вашафункция(QString));
void вашафункция(QString str){qDebug()<<str;}
И да , дестркутор в класс еще нужно
« Последнее редактирование: Сентябрь 03, 2013, 22:50 от BuRn » Записан
NickSergeev
Гость
« Ответ #3 : Сентябрь 04, 2013, 13:42 »

Ну ваш код ничем не отличается от моего, и выдаёт тоже самое на тех сайтах, странно если проблема в блокировке со стороны сервера, если можно с браузера посмотреть, то значит можно как - то и скачать исходный код.
Записан
Bepec
Гость
« Ответ #4 : Сентябрь 04, 2013, 14:08 »

Смотрите заголовок ответа - может вас просто перенаправляют на заглушку?

Хм. Или же у вас антивирь какой-нить стоит, что рубит загрузку. Хотя врядли Улыбающийся

PS после работы (17:00 МСК) напишу тестовую прожку и выложу сюда.
« Последнее редактирование: Сентябрь 04, 2013, 14:13 от Bepec » Записан
BuRn
Гость
« Ответ #5 : Сентябрь 04, 2013, 17:07 »

Ну ваш код ничем не отличается от моего, и выдаёт тоже самое на тех сайтах, странно если проблема в блокировке со стороны сервера, если можно с браузера посмотреть, то значит можно как - то и скачать исходный код.
А можно список сайтов ? или хотя бы 1, проверить.
Записан
Bepec
Гость
« Ответ #6 : Сентябрь 04, 2013, 17:12 »

Он приведён в первом посте Улыбающийся

Update: Сделал класс как просили.

Сайты оригинальные. Первый без прямого указания адреса (без www) отдаёт команду для браузеров на обновление с адресом полным (с www). Ну а остальные при неправильном наборе перенаправляют. Вроде больше ничего не нашлось.

PS ссылка на архив внизу сообщения. Исходники + тестовая программа.
https://www.dropbox.com/sh/6wvj3mcp0zssvum/pE69DriCSj/Source.zip
« Последнее редактирование: Сентябрь 04, 2013, 19:42 от Bepec » Записан
NickSergeev
Гость
« Ответ #7 : Сентябрь 04, 2013, 20:43 »

вывод такой же как и у моей самописной программы:

например, на football-lineups.com
<html><head><meta http-equiv="refresh" content="0;url=http://www.football-lineups.com/">  </head></html>

думаю может заюзать curl
Записан
Bepec
Гость
« Ответ #8 : Сентябрь 04, 2013, 20:52 »


Первый без прямого указания адреса (без www) отдаёт команду для браузеров на обновление с адресом полным (с www).

ппц специально заострил на этом внимание Веселый

Адрес полный пишите.

"www.football-lineups.com"
"www.marathonbet.com"
"www.24score.com"

И будет вам счастье. Просто админ football решил делать не перенаправление, а заглушку при помощи HTML. А HTML обрабатывается браузером.

PS переведу вывод этого футболса - вы ввели адрес без www, потому идите ка вы на www.

Записан
NickSergeev
Гость
« Ответ #9 : Сентябрь 05, 2013, 11:56 »

 Давно видимо не прогал) И странно что он выводит всё равно чего - то)) Кидай кошелёк, скину денежку)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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