Объект proxyswitcher. Продвинутая работа со списком прокси.
В версии 7.0.4 появился новый объект $proxyswitcher. Функционал этого объекта связан с такими востребованными возможностями программы, как работа с прокси.
Для чего был добавлен объект $proxyswitcher.
$proxyswitcher это объект, который существенно облегчает работу с прокси и является дополнением для основной функции работы с прокси browser->enable_proxy.
По сути proxyswitcher это переключатель между прокси, которые он может брать из разных источников – из файлов, по ссылкам на сайтах или непосредственным добавлением прокси в объект в скрипте. Причём при добавлении объект сам уберёт все дубликаты. Таким образом, у вас получается список прокси, с которым вы дальше можете работать в вашем скрипте.
Как это работает?
Первое что вам нужно сделать это инициализировать объект с помощью функции:
$proxyswitcher->init("Proxy Switcher");
При этом в папке с вашим скриптом будет создана ещё одна папка Proxy Switcher для всех манипуляция с вашими списками прокси. Можно указать точный путь для этой папки, это будет удобно использовать для работы во многопоточном режиме.
Далее вам нужно добавить прокси для перебора. Это можно выполнить с помощью функций:
// добавить прокси из файла
$proxyswitcher->add_proxies_from_file($path);
// добавить прокси напрямую
$proxyswitcher->add_proxies("125.212.207.121:3128\n");
// добавить прокси co страницы по ссылке
$proxyswitcher->add_proxies_from_url("http://humanemulator.net/poligon/add_proxies.html");
После чего зададим режим перебора прокси. Есть два варианта брать прокси случайным образом — true или последовательно – false:
// задаём режим последовательного перебора прокси $proxyswitcher->set_random_rotate_mode(false);
Теперь мы можем перейти непосредственно к получению прокси для этого используется функция:
// получить прокси из нашего списка $proxy = $proxyswitcher->get_next_proxy(true);
При этом мы можем задать два варианта получения: true – это когда взятый прокси удаляется из нашего списка и false – взятый прокси будет использоваться повторно.
Ну а для установки прокси используется стандартная функция:
$browser->enable_proxy("",$proxy);
Какой ещё функционал есть в объекте?
Помимо добавления прокси в объект $proxyswitcher есть возможность обновлять список прокси из заданных источников. При этом для запуска обновления может использоваться количество оставшихся прокси в списке или заданный промежуток времени.
Для этого используется следующие функции:
// обновление списка из файла
$proxyswitcher->set_update_path($path);
// обновление списка по ссылки
$proxyswitcher->set_update_url("http://humanemulator.net/poligon/add_proxies.html");
// обновлять список каждые 100 секунд
$proxyswitcher->set_update_period(100);
// обновлять список когда в нём не останется прокси
$proxyswitcher->set_update_proxy_count(0);
Также есть ещё функция отчистки списка от старых прокси:
$proxyswitcher->clear();
Функция моментального обновления списка из заранее заданных источников:
$proxyswitcher->update();
Функция получения всего списка проски в виде строки разделённой переносом строки:
$proxyswitcher->get_all_proxies();
Функция получения текущего количества прокси в списке:
$proxyswitcher->get_proxy_count();
Работа во многопоточном режиме.
Объект $proxyswitcher можно использовать во многопоточном режиме, то есть работать с одним списком из разных потоков. При этом управляющим потоком будет какой то один, в нём будет функционал по настройке и обновлению списка прокси. Остальные потоки просто будут использовать данный список для работы.
Вывод.
Данный объект существенно облегчает работу с прокси и будет очень полезен всем кто использует в своих скриптах работу со списками проксей. Обсудить функционал этого объекта можно на нашем форуме в разделе статьи из блога.
Пример использования.
// 1
echo "1. Сфорируем файл с прокси : ";
$path="test/add_proxies.urls";
echo $file_os->delete($path)." ";
echo $textfile->add_string_to_file($path,"222.124.22.133:8080\n")." ";
echo $textfile->add_string_to_file($path,"47.90.72.227:8088\n")." ";
// 2
echo "\n2. Инициализируем переключатель прокси в папке: ";
echo $proxyswitcher->init("Proxy Switcher")."\n";
// 3
echo "3. Очитим все что там что было чтобы перебирать с начала: ";
echo $proxyswitcher->clear()."\n";
// 4
echo "4. Добавим прокси из файла : ";
echo $proxyswitcher->add_proxies_from_file($path)."\n";
// 4.5
echo "4.5 Добавим прокси : ";
echo $proxyswitcher->add_proxies("125.212.207.121:3128\n")."\n";
// 5
echo "5. Добавим прокси из урла : ";
echo $proxyswitcher->add_proxies_from_url("http://humanemulator.net/poligon/add_proxies.html")."\n";
// 6
echo "6. Зададим параметры обновления : ";
echo $proxyswitcher->set_update_path($path)." ";
echo $proxyswitcher->set_update_url("http://humanemulator.net/poligon/add_proxies.html")." ";
echo $proxyswitcher->set_update_period(100)." ";
echo $proxyswitcher->set_update_proxy_count(0)."\n";
// 6.5
echo "6.5. Зададим последовательный режим перебора : ";
echo $proxyswitcher->set_random_rotate_mode(false)."\n";
// 7
$browser->set_wait_params(120,1);
echo "7. Переберем прокси : \n\n";
while (true)
{
$proxy = $proxyswitcher->get_next_proxy();
if ($proxy=="")
break;
echo $proxy;
$browser->enable_proxy("",$proxy);
if ($browser->navigate("whoer.net"))
echo "рабочий";
else
echo "тухлый";
echo "\n";
}
// 8
echo "\n8. Получим все содержимое перключателя проксей : \n\n";
echo $proxyswitcher->get_all_proxies()."\n";
// 9
echo "\n9. Получим число проксей : ";
echo $proxyswitcher->get_proxy_count()."\n";
// 10
$browser->set_wait_params(120,1);
echo "10. Переберем прокси (с удалением): \n\n";
while (true)
{
$proxy = $proxyswitcher->get_next_proxy(true);
if ($proxy=="")
break;
echo $proxy." осталось: ".$proxyswitcher->get_proxy_count()." ";
if ($proxyswitcher->get_proxy_count()==0)
break;
$browser->enable_proxy("",$proxy);
if ($browser->navigate("whoer.net"))
echo "рабочий\n";
else
echo "тухлый\n";
echo "\n";
}
// 11
echo "\n\n11. Зададим случайный режим перебора : ";
echo $proxyswitcher->set_random_rotate_mode(true)."\n";
// 12
echo "12. Обновим : ";
echo $proxyswitcher->update(true)."\n";
// 13
$browser->set_wait_params(120,1);
echo "13. Переберем прокси (случайно с удалением): \n\n";
while (true)
{
$proxy = $proxyswitcher->get_next_proxy(true);
if ($proxy=="")
break;
echo $proxy." осталось: ".$proxyswitcher->get_proxy_count()." ";
if ($proxyswitcher->get_proxy_count()==0)
break;
$browser->enable_proxy("",$proxy);
if ($browser->navigate("whoer.net"))
echo "рабочий\n";
else
echo "тухлый\n";
echo "\n";
}
// конец
echo "<hr><br>";
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.