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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: WebKit  (Прочитано 4751 раз)
weldpua2008
Гость
« : Март 01, 2009, 16:07 »

Привет
Нужно написать приложение, которое будет загружать определённую страницу бесконечное количество раз и использовать прокси сервер - нужно, для подстройки биллинга - эдакий трафикогенератор...


Есть книга - Юрия Земского, там есть пример на WebKit'е, пробовал добавить, но ничего не загружается, если убрать - загружается Грустный :
Код:
		proxy.setType(QNetworkProxy::HttpProxy);
  proxy.setHostName("192.168.124.85");
  proxy.setPort(3128);
//proxy.setUser("username");
  //proxy.setPassword("password");
  QNetworkProxy::setApplicationProxy(proxy);
Что бы использовать прокси, но не работает...
webbrowser.h
Код:
#ifndef _WEBBROWSER_H_
#define _WEBBROWSER_H_

#include <QMainWindow>
class QWebView;
class QLineEdit;
class QPushButton;
class QProgressBar;

class Webbrowser : public QMainWindow {
    Q_OBJECT
public:
    Webbrowser();
public slots:
    void load();
    void started();
    void finished();
    void onTitleChanged(const QString& text);
private:
    QWebView *m_view;
    QToolBar *m_fileToolBar;
    QLineEdit *m_adress;
    QPushButton *m_backward, *m_forward, *m_reload, *m_stop;
    QProgressBar *m_progress;
};

#endif // _WEBBROWSER_H_

webbrowser.срр
Код:
#include <QtGui>
#include <QtWebKit>
 #include <QNetworkProxy>
 // #include <QtScript>
#include "webbrowser.h"
 #include <QHttp>
#define HTTP "http://"
#define START_URL "192.168.0.1"

Webbrowser::Webbrowser(){
    m_view = new QWebView(this);
    setCentralWidget(m_view);
    setWindowTitle("Simple Web Browser");
    connect(m_view, SIGNAL(titleChanged(const QString&)),
            this, SLOT(onTitleChanged(const QString&)));
   
    m_fileToolBar = addToolBar(tr("File"));
   
    m_adress = new QLineEdit(START_URL, m_fileToolBar);
    m_fileToolBar->addWidget(m_adress);
    connect(m_adress, SIGNAL(returnPressed()), this, SLOT(load()));
   
    m_backward = new QPushButton(
        style()->standardIcon(QStyle::SP_ArrowBack),
        tr("Backward"), m_fileToolBar);
    m_fileToolBar->addWidget(m_backward);
    connect(m_backward, SIGNAL(clicked()), m_view, SLOT(back()));
   
    m_forward = new QPushButton(
        style()->standardIcon(QStyle::SP_ArrowForward),
        tr("Forward"), m_fileToolBar);
    m_fileToolBar->addWidget(m_forward);
    connect(m_forward, SIGNAL(clicked()), m_view, SLOT(forward()));
   
    m_reload = new QPushButton(
        style()->standardIcon(QStyle::SP_BrowserReload),
        tr("Reload"), m_fileToolBar);
    m_fileToolBar->addWidget(m_reload);
    connect(m_reload, SIGNAL(clicked()), m_view, SLOT(reload()));
   
    m_stop = new QPushButton(
        style()->standardIcon(QStyle::SP_BrowserStop),
        tr("Stop"), m_fileToolBar);
    m_fileToolBar->addWidget(m_stop);
    connect(m_stop, SIGNAL(clicked()), m_view, SLOT(stop()));
   
    m_progress = new QProgressBar(m_fileToolBar);
    m_fileToolBar->addWidget(m_progress);
    connect(m_view, SIGNAL(loadProgress(int)), m_progress, SLOT(setValue(int)));
   
    connect(m_view, SIGNAL(loadStarted()), this, SLOT(started()));
    connect(m_view, SIGNAL(loadFinished()), this, SLOT(finished()));
   
  /*  QNetworkProxy proxy;
  proxy.setType(QNetworkProxy::HttpProxy);
  proxy.setHostName("194.246.124.85");
  proxy.setPort(80);
//proxy.setUser("username");
  //proxy.setPassword("password");
  QNetworkProxy::setApplicationProxy(proxy);

*/
  load();
}

void Webbrowser::load(){


    QString name(m_adress->text());
    if (!name.startsWith(HTTP))
        name = HTTP + name.trimmed();
   
    m_view->load(QUrl(name));

   
   
}

void Webbrowser::started(){
    m_stop->setEnabled(true);
    m_progress->setEnabled(true);
}

void Webbrowser::finished(){
    m_stop->setEnabled(false);
    m_progress->setEnabled(false);
     
   
}

void Webbrowser::onTitleChanged(const QString& text){
    setWindowTitle(text);
}


main.cpp
Код:
#include <QApplication>
#include "webbrowser.h"

int main(int argc, char *argv[]){
    QApplication app(argc, argv);
    Webbrowser win;
    win.show();
    return app.exec();
   
}
Записан
weldpua2008
Гость
« Ответ #1 : Март 01, 2009, 16:12 »

Я так понимаю, что можно было бы сделать, что то типа:
connect(m_view, SIGNAL(loadFinished()), this, SLOT(reload())); //что бы перегружалась все время страница, но не работает
Пробовал в slot finished() добавить вызов:
load(), даже напрямую m_view->load(QUrl("192.168.0.1")), но страница один раз загружается...
Что Я делал не так?

Записан
kirill
Гость
« Ответ #2 : Март 02, 2009, 06:36 »

Если ты будешь вебкиту подкидывать адрес, который он уже загрузил, то он его будет откидывать. Надо другой урл совать, а потом опять твой. Тогда будет обновление.
Записан
weldpua2008
Гость
« Ответ #3 : Март 02, 2009, 19:22 »

Если ты будешь вебкиту подкидывать адрес, который он уже загрузил, то он его будет откидывать. Надо другой урл совать, а потом опять твой. Тогда будет обновление.
Ок, но как тогда работает reload() ?
Так же непонятно с прокси - как его использовать?
Записан
sendevent
Гость
« Ответ #4 : Март 03, 2009, 20:59 »

трафикгенератор? через проксю? досером попахивает;-)
конструкция
Код:
connect(m_view, SIGNAL(loadFinished()), this, SLOT(reload()));
будет уходить в бесконечность, надо бы в релоаде обрабатывать события.
мне кажется, можно скинуть все заботы на плечи webkit'а, пусть страница сама релоадится механизмами html|javascript'а.
примерно так: загружаешь пагу, по сигналу loadFinished добавляешь в код полученной страницы авторедирект на саму же себя, скармливаешь полученный "новый" хтмл той же вьюшке, от которой пришел сигнал - и погнали по новой.
проверил на своем проекте, такой подход "работает" - по крайней мере, loadStarted/Finished/Progress - емитятся, но чего происходит на уровне хттп - хз, нету снифера. далее - "фантазия на тему":
Код:
void NotDoSer::slotLoadFinished( bool ok )
{
    qApp->processEvents();
    if( !ok )
    {
        //-- как-то обрабатываем...
        processError();
        return;
    }
   
    QString html = getBodyAsHtml();
    if( !html.isEmpty()
        && processSource( html )
        && m_bContinueNotDoSing )
    {
        m_pView->setHtml( html, m_urlStr );
        disconnect( m_pView );
    }
}

QString NotDoSer::getBodyAsHtml() const
{
    QString hyperText;
    if( m_pView )
    {
        QWebPage *tmpWebPagePtr = m_pView->page();
        if( tmpWebPagePtr )
        {
            QWebFrame *tmpWebFrame = tmpWebPagePtr->mainFrame();
            if( tmpWebFrame )
            {
                hyperText = tmpWebFrame->toHtml();
            }
        }
    }
   
    return hyperText;
}

bool NotDoSer::processSource( QString& src ) const
{
    if( src.contains( m_targetTagStr ) )
    {
        src.replace( m_targetTagStr, m_patternStr, Qt::CaseInsensitive );
        return true;
    }
   
    return false;
}

void NotDoSer::inti()
{
    m_bContinueNotDoSing = false;
    m_targetTagStr = tr( "<head>" );
    m_urlStr = tr( "http://example.com" );
    m_iRefreshSeconds = 0;
    //-- "Оптимальный redirect (META тег + JavaScript)"
    //-- google->http://htmlcoder.visions.ru/HTML/?9
    QString m_patternStr = tr( "%1\n"
    "<script language=\"JavaScript1.1\" type=\"text/javascript\">\n"
    "<!--\n"
    "location.replace(\"%2\");\n"
    "//-->\n"
    "</script>\n"
    "<noscript>\n"
    "<meta http-equiv=\"Refresh\" content=\"%3; URL=%2\">\n"
    "</noscript>" ).arg( m_targetTagStr ).arg( m_urlStr ).arg( m_iRefreshSeconds );
}

по поводу прокси - хз... она точно рабочая? она точно хттп/сакс5? %qtdir%/demos/browser с ней как себя чувсвует?
« Последнее редактирование: Март 03, 2009, 21:11 от sendevent » Записан
weldpua2008
Гость
« Ответ #5 : Март 04, 2009, 01:29 »

трафикгенератор? через проксю? досером попахивает;-)
конструкция
Я буду писать сетевое приложение работающее с большим количеством подключений...
Мне нужно научиться соеденяться через прокси, вот для проверки Я и хочу использовать webKit, Я хотел передавать каждый раз url=myip.ru или подобное и смотреть меняется ли отображаемый ИП - но этого не происходило(прокси в qt не работал) + Я не смог реализовать загрузку новой страницы...

А вот дальше как смог бы написать это. то можно было бы переходить к реализации стресс-тестов для сервера приложений, ведь Мне надо гарантия обслуживания 1000 одновременых подключений с разных ИП.

Второе задание которое Я намерен был решить - трафикогенератор


по поводу прокси - хз... она точно рабочая? она точно хттп/сакс5? %qtdir%/demos/browser с ней как себя чувсвует?
Я же писал - не работает, разработчики что-то писали, что нужно что-то другое(другой клас) использовать, но Я пока не пробовал
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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