crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Перебор доступных proxy-серверов по списку, работа с proxy
Andrey77
  опции профиля:
сообщение 12.8.2010, 21:17
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 12.8.2010
Пользователь №: 1952

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




Репутация:   0  


Здравствуйте. Пишу программу на qt , уже почти все написал и реализовал что хотел Единственный вопрос это с прокси. Программа будет использовать более 200 прокси и конечно же некоторые из этих прокси не будут работать. Так вот собственно нужно как то профиксить это. Тоесть например если прокси не отвечаает в течении какого то времени (навскидку около 5сек) то брать след. прокси.. Мысль есть а вот с реализацией туго может быть поможете?))

Сообщение отредактировал Litkevich Yuriy - 12.8.2010, 23:27
Причина редактирования: исправил название темы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.8.2010, 21:39
Сообщение #2


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Массив (или вектор) объектов + таймер подойдёт ? :)

Абстрактный вопрос - абстрактный ответ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrey77
  опции профиля:
сообщение 12.8.2010, 21:57
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 12.8.2010
Пользователь №: 1952

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




Репутация:   0  


а поконкретнее сможете подсказать? вот код.
Раскрывающийся текст
#include "mainwindow.h"
#include <QtGui>
#include <QtNetwork/QNetworkProxy>
#include <QStringList>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    view = new QWebView(this);
    setCentralWidget(view);
    i = 0;
    port = 0;
    pos3 = 0;
    fileName = "proxylist.txt";
    connect(this,SIGNAL(good()),this,SLOT(robot()));
    connect(view,SIGNAL(loadFinished(bool)),this,SLOT(proxy()));
    load();
}
void MainWindow::load(){
        QFile file(fileName);
        if ( file.open( QFile::ReadOnly ) ) {
            QTextStream stream( &file );
            QString line;
            while ( !stream.atEnd() ) {
                line = stream.readLine();
                lines += line;
                         }
            file.close();
        }
        proxy();
  }
void MainWindow::proxy(){
                 line = lines.takeAt(i);
                 pos3 = line.indexOf(':');
                 if(pos3!=-1){
                 link = line.mid(pos3+1);
                 port = link.toInt();
                 host = line.mid(0,pos3);}
                 QNetworkProxy proxy;
                 proxy.setType(QNetworkProxy::HttpProxy);
                 proxy.setHostName(host);
                 proxy.setPort(port);
                 QNetworkProxy::setApplicationProxy(proxy);
                 emit good();
           }
void MainWindow::robot(){
    view->load(QUrl("http://www.myip.ru/get_ip.php?loc="));
    view->page()->settings()->setAttribute(QWebSettings::AutoLoadImages, false);
    view->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.8.2010, 22:09
Сообщение #4


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


С таким форматированием и без единого комментария - тут только тебе известно, что код делает :) Форматирование, скажем, дело поправимое
#include "mainwindow.h"
#include <QtGui>
#include <QtNetwork/QNetworkProxy>
#include <QStringList>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    view = new QWebView(this);
    setCentralWidget(view);
    i = 0;
    port = 0;
    pos3 = 0;
    fileName = "proxylist.txt";
    connect(this,SIGNAL(good()),this,SLOT(robot()));
    connect(view,SIGNAL(loadFinished(bool)),this,SLOT(proxy()));
    load();
}

void MainWindow::load()
{
    QFile file(fileName);
    if ( file.open( QFile::ReadOnly ) )
    {
        QTextStream stream( &file );
        QString line;
        while ( !stream.atEnd() )
        {
            line = stream.readLine();
            lines += line;
        }
        file.close();
    }
    proxy();
}

void MainWindow::proxy()
{
    line = lines.takeAt(i);
    pos3 = line.indexOf(':');
    if(pos3!=-1)
    {
        link = line.mid(pos3+1);
        port = link.toInt();
        host = line.mid(0,pos3);
    }
    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::HttpProxy);
    proxy.setHostName(host);
    proxy.setPort(port);
    QNetworkProxy::setApplicationProxy(proxy);
    emit good();
}

void MainWindow::robot()
{
    view->load(QUrl("http://www.myip.ru/get_ip.php?loc="));
    view->page()->settings()->setAttribute(QWebSettings::AutoLoadImages, false);
    view->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
}


ещё непонятно наличие
connect(this,SIGNAL(good()),this,SLOT(robot()));

Ведь можно просто вызвать функцию
/*emit good();*/ robot();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrey77
  опции профиля:
сообщение 12.8.2010, 22:15
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 12.8.2010
Пользователь №: 1952

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




Репутация:   0  


Ну да можно так согласен с Вами. Но а по теме может быть чтонибудь подскажете?)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.8.2010, 22:29
Сообщение #6


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Цитата(Andrey77 @ 13.8.2010, 1:15) *
Но а по теме может быть чтонибудь подскажете

а я не вижу комментариев :) Лично я не знаю, что делает данный код, поэтому подсказать что-то конкретное не могу. Может быть, мимо пробежит телепат - вооот тогдаааа ))

предполагаю, что один из 200 прокси - это вот этот код
    QNetworkProxy proxy;
    proxy.setType(QNetworkProxy::HttpProxy);
    proxy.setHostName(host);
    proxy.setPort(port);
    QNetworkProxy::setApplicationProxy(proxy);

?

Если я, к примеру, угадал, то вызов в таймере раз в 5 секунд процедуры load() (или proxy() , тебе виднее ) - это будет эквивалент массива из одного объекта прокси

Так?


И дело за мАлым:

преобразуем данный код к виду:
    QNetworkProxy& proxy=m_ProxyKeeper.GetNextProxy();
    proxy.setType(QNetworkProxy::HttpProxy);
    proxy.setHostName(host);
    proxy.setPort(port);
    QNetworkProxy::setApplicationProxy(proxy);


где m_ProxyKeeper - это объект класса-менеджера объектов "proxy". Метод GetNextProxy() которого возвращает ссылку на следующий proxy из внутреннего массива

Сообщение отредактировал Алексей1153 - 13.8.2010, 6:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrey77
  опции профиля:
сообщение 12.8.2010, 22:33
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 12.8.2010
Пользователь №: 1952

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




Репутация:   0  


Раскрывающийся текст
#include "mainwindow.h"
#include <QtGui>
#include <QtNetwork/QNetworkProxy>
#include <QStringList>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
view = new QWebView(this);
setCentralWidget(view);
i = 0;
port = 0;
pos3 = 0;
fileName = "proxylist.txt";
connect(this,SIGNAL(good()),this,SLOT(robot()));
connect(view,SIGNAL(loadFinished(bool)),this,SLOT(proxy()));
load();
}
void MainWindow::load(){ // Функция загрузки прокси из файла в QStringList.
QFile file(fileName);
if ( file.open( QFile::ReadOnly ) ) {
QTextStream stream( &file );
QString line;
while ( !stream.atEnd() ) {
line = stream.readLine();
lines += line;
}
file.close();
}
proxy();
}
void MainWindow::proxy(){
line = lines.takeAt(i); //берем нулевой элемент lines и приравниваем его к line можно
pos3 = line.indexOf(':'); //находим позицию двоеточия так как прокси у нас записаны в виде 123.456.789.000:80
if(pos3!=-1){ //если не возвращается -1 то
link = line.mid(pos3+1); //копируем все что после двоеточия а именно сам порт 80
port = link.toInt(); //конвертируем его в целочисленную переменную
host = line.mid(0,pos3);} //далее копируем в host все что до двоеточия
QNetworkProxy proxy; //далее работа прокси думаю объяснять не стоит и так все понятно
proxy.setType(QNetworkProxy::HttpProxy);
proxy.setHostName(host);
proxy.setPort(port);
QNetworkProxy::setApplicationProxy(proxy);
emit good(); //сигнал good способствует вызову функции робот в котором отображается страница и в ней прописывается текущий ип.
}
void MainWindow::robot(){
view->load(QUrl("http://www.myip.ru/get_ip.php?loc="));
view->page()->settings()->setAttribute(QWebSettings::AutoLoadImages, false);
view->page()->settings()->setAttribute(QWebSettings::PluginsEnabled, false);
}



Простите за быдло код просто я буквально вторую неделю занимаюсь qt толком ничего не знаю поэтому пишу как могу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.8.2010, 22:33
Сообщение #8


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


глянь мой предыдущий пост - я там дописал, немного не успел до твоего поста )

Цитата(Andrey77 @ 13.8.2010, 1:33) *
я буквально вторую неделю занимаюсь qt толком ничего не знаю поэтому пишу как могу

а я всего месяц Qt занимаюсь, но написание кода - это не относится к Qt.

Это стиль, культура кода, от этого зависит понятность, читаемость ->> легче исправлять код

Сообщение отредактировал Алексей1153 - 12.8.2010, 22:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrey77
  опции профиля:
сообщение 12.8.2010, 22:49
Сообщение #9


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 12.8.2010
Пользователь №: 1952

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




Репутация:   0  


Хорошо) Огромное спасибо буду думать реализовывать что непонятно спрашивать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 12.8.2010, 23:25
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Andrey77, возьми на заметку:
* Название темы должно отражать её суть
* Справка по оформлению сообщений: Административный > Обратная связь > Справка по кнопкам и тэгам форума
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 25.4.2024, 7:04