crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> Загрузка исходника html страницы
ufna
  опции профиля:
сообщение 27.8.2010, 11:20
Сообщение #11


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Не, ну реально, посмотреть любой пример с QNetwortAccessManager, QNetworkReply() и get() религия не позволяет? О_о
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 27.8.2010, 11:35
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


ufna,
тебе же говорят - сервер не дает страничку если ты не браузер. я сейчас только что проверил. надо под браузер шифроваться для этого надо знать значени полей http запроса отправляемого браузером. я их наизусть не помню - поставлю wireshark посмотрю. )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 27.8.2010, 11:42
Сообщение #13


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Извини за резкость, но задача в ассистанте разобрана на кучу раз.

Минимальный пример:

a_teststate.h
//-----------------------------------------------------------------------------
// File: a_teststate.h
//
// Desc:
//-----------------------------------------------------------------------------

#ifndef A_TESTSTATE_H
#define A_TESTSTATE_H

#include <QObject>

#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QNetworkRequest>

//--------------------------------------------------------------------------------------
// Name: cTestState
// Desc:
//--------------------------------------------------------------------------------------
class cTestState :
        public QObject
{
    Q_OBJECT

public:
    // Constructor & destructor
    //----------------------------------------------------------------------------------
    cTestState(QObject *parent = 0);
    ~cTestState();

    QNetworkAccessManager* networkManager() { return pNetManager; }

private:
    //
    //----------------------------------------------------------------------------------
    QNetworkAccessManager *pNetManager;

public slots:
    // control
    //----------------------------------------------------------------------------------
    void slotReadyRead();
    void slotError(QNetworkReply::NetworkError);
    void slotFinished();

};

#endif



a_teststate.cpp
//-----------------------------------------------------------------------------
// File: a_teststate.cpp
//
// Desc:
//-----------------------------------------------------------------------------

#include "a_teststate.h"

#include <QDebug>

//--------------------------------------------------------------------------------------
// cTestState class constructor
//--------------------------------------------------------------------------------------
cTestState::cTestState(QObject *parent)
    : QObject(parent)
{      
    pNetManager = new QNetworkAccessManager(this);

    QNetworkRequest request;
    request.setUrl(QUrl("http://ufna.ru/"));

    QNetworkReply *reply = pNetManager->get(request);
    connect(reply, SIGNAL(readyRead()), this, SLOT(slotReadyRead()));
    connect(reply, SIGNAL(error(QNetworkReply::NetworkError)),
                this, SLOT(slotError(QNetworkReply::NetworkError)));
    connect(reply, SIGNAL(finished()), this, SLOT(slotFinished()));
}

//--------------------------------------------------------------------------------------
cTestState::~cTestState() {}

//=============================================================================
// PUBLIC SLOTS
//=============================================================================

//--------------------------------------------------------------------------------------
void cTestState::slotReadyRead()
{
    qDebug() << "cTestState::slotReadyRead()";
}

//--------------------------------------------------------------------------------------
void cTestState::slotError(QNetworkReply::NetworkError error)
{
    qDebug() << "cTestState::slotError("
            << error << ")";
}

//--------------------------------------------------------------------------------------
void cTestState::slotFinished()
{
    qDebug() << "cTestState::slotFinished()";

    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    reply->deleteLater();

    // Вывод загруженной страницы
    QByteArray data = reply->readAll();
    QString str = QString::fromUtf8(data);
    qDebug() << str;
}





а, счас проверим

Цитата(kwisp @ 27.8.2010, 12:35) *
ufna,
тебе же говорят - сервер не дает страничку если ты не браузер. я сейчас только что проверил. надо под браузер шифроваться для этого надо знать значени полей http запроса отправляемого браузером. я их наизусть не помню - поставлю wireshark посмотрю. )


счас проверим. В принципе, там проверка либо по яве, либо по тому что шлется в юзер-агент.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 27.8.2010, 11:49
Сообщение #14


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


ну проверь.
о результатах доложить:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 27.8.2010, 11:54
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Нужно "прикинутся" и все он будет отдавать. :)
    QNetworkRequest req;
    req.setUrl( QUrl( "http://www.kinopoisk.ru/level/1/film/397220/" ) );
    req.setRawHeader( "User-Agent:", "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.1b4) Gecko/20090427 Fedora/3.5-0.20.beta4.fc11 Firefox/3.5b4" );

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 27.8.2010, 11:55
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


В примере выше моем делаем в конструкторе:

request.setUrl(QUrl("http://www.kinopoisk.ru/level/1/film/397220/"));
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.437.3 Safari/534.1");

QNetworkReply *reply = pNetManager->get(request);

/* далее по тексту */


На выходе - то что нужно. Только в qDebug() все данные пихать не надо, т.к. размер большой - ничего не выведет. По кускам - все отлично.

Практически одновременно с BRE отписались :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 27.8.2010, 11:58
Сообщение #17


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


другое дело.:)

и так тоже работает
Цитата
wget -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.437.3 Safari/534.1" http://www.kinopoisk.ru/level/1/film/397220/


потом можно так
Цитата
grep "repeat-x; font-weight: normal \!important; text-decoration: none" ./index.html | sed 's/.* none">/ /g' | sed 's/<span.*/ /g'

можно конечно пооптимальнее обработать но 8,202 я получил с твоей странички
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 27.8.2010, 13:22
Сообщение #18


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Цитата(kwisp @ 27.8.2010, 11:58) *
wget -U "Mozilla/5.0 (Windows; U; Windows NT 5.1; AppleWebKit/534.1 (KHTML, like Gecko) Chrome/6.0.437.3 Safari/534.1" http://www.kinopoisk.ru/level/1/film/397220/

Похожее находил, тока пример тот не работал. А это пашит, я в шоке! :o:
Я конечно еще не такой МОЗГ как остальные тут, ну надеюсь разберусь потихоньку.
По крайней мере половина слов мне еще не знакома :lol: (ethereal снифер wireshark парсить и тд.)
Как говорится: вики в помощь, сейчас поучимся уму разуму.

ufna, я еще разбираюсь с QNetwortAccessManager...

Сообщение отредактировал RazrFalcon - 27.8.2010, 13:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 18.9.2010, 21:01
Сообщение #19


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


А как скачать большой файл? К примеру
void MainWindow::slotFinished()
{  
//   file.close();
    QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
    file.setFileName("lost.avi");
    file.open(QIODevice::WriteOnly);
    QDataStream stream( &file );

    stream << reply->readAll();

    file.close();
    reply->deleteLater();
}

выдаёт критическую ошибку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 19.9.2010, 10:41
Сообщение #20


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


Решил свою проблему. Код лежит http://paste.org/pastebin/view/22552, если кому-то интересно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 18:14