crossplatform.ru

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


  Ответ в Загрузка исходника html страницы
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
k0p4 Дата 19.9.2010, 10:41
  Решил свою проблему. Код лежит http://paste.org/pastebin/view/22552, если кому-то интересно.
k0p4 Дата 18.9.2010, 21:01
  А как скачать большой файл? К примеру
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();
}

выдаёт критическую ошибку.
RazrFalcon Дата 27.8.2010, 13:22
 
Цитата(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...
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/


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

можно конечно пооптимальнее обработать но 8,202 я получил с твоей странички
ufna Дата 27.8.2010, 11:55
  В примере выше моем делаем в конструкторе:

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 отписались :)
BRE Дата 27.8.2010, 11:54
  Нужно "прикинутся" и все он будет отдавать. :)
    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" );

kwisp Дата 27.8.2010, 11:49
  ну проверь.
о результатах доложить:)
ufna Дата 27.8.2010, 11:42
  Извини за резкость, но задача в ассистанте разобрана на кучу раз.

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

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:35
  ufna,
тебе же говорят - сервер не дает страничку если ты не браузер. я сейчас только что проверил. надо под браузер шифроваться для этого надо знать значени полей http запроса отправляемого браузером. я их наизусть не помню - поставлю wireshark посмотрю. )
ufna Дата 27.8.2010, 11:20
  Не, ну реально, посмотреть любой пример с QNetwortAccessManager, QNetworkReply() и get() религия не позволяет? О_о
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 2:12