Масова перевірка proxy на працездатність - форум web майстра і комп'ютерника

Добрий день.
Багато з тих, хто писав парсери, стикалися з дуже неприємною ситуацією, коли сайт блокує часті запити з одного IP. Якщо ж виставити затримку з допомогою sleep (), процес йде дуже повільно, що нас не дуже влаштовує.
Провівши в пошуку рішення якийсь час, все розуміють, що для того, щоб сервер, на який посилаються запити, не блокував їх, - потрібно використовувати проксі-сервери.
Ну що-ж, відмінно, рішення знайдено! Програміст, задоволений собою, йде шукати списки проксі-серверів. Якщо завдання, яке йому потрібно виконати, невелика, то він успішно знаходить кілька IP проксі, вручну їх записує в файл і успішно використовує.
Але якщо запитів потрібно робити дуже багато, десятки проксі нам не вистачить. З жахом ми відкриваємо для себе новина, що немає великих списків проксі, 100% яких би працювали і надавалися безкоштовно.
Безкоштовні проксі часто перестають працювати після одного дня роботи. І навіть якщо ми сьогодні скопіюємо до себе пару сотень проксі, назавтра половина з них буде недоступне.

Я в один прекрасний день зіткнувся саме з такою ситуацією. Не знав, що робити. Звичайно можна було б купити платні списки проксі, але не варіант, що і там все проксі будуть 100% робітниками.
Тому я прийшов до висновку, що потрібно якось перевіряти проксі сервери на працездатність, перед тим, як їх використовувати. Тому вирішив написати скрипт перевірки, який і представляю Вашій увазі:

Як бачите, в даному класі проксі-сервери вже вантажаться з сайту freeproxylists.com і Вам немає необхідності шукати десь проксі, а потім передавати на перевірку. Все вже зроблено мною
Тепер давайте розберемо деякі методи цього класу. По-перше, метод перевірки (checkProxy ()):
Для виконання запитів використовується CURL, а вірніше бібліотека RollingCurl (скачати Ви її можете з GitHub), яка є надбудовою над стандартним CURL. Працювати з даної бібліотекою дуже зручно, тому що можна використовувати так звану многопоточность, тобто кілька запитів може виконуватися незалежно один від одного. Таким чином ми за певний проміжок часу зможемо перевірити більшу кількість проксі-серверів.

Перед використанням даного класу Вам необхідно встановити константу DOMAIN, в якій вкажіть свій домен, наприклад так:

Відмінно, константу встановили. Тепер нам потрібно робити кудись запити через певний проксі, звідки будемо отримувати відповідь. Давайте створимо для цього в корені сайту файл "responseproxy.php", в який помістимо просто слово "success". Більш в ньому нічого не потрібно.
Потрібно це для того, щоб клас робив запити до цього файлу і отримував його вміст.

У методі checkProxy як callback-функції ми вказуємо метод Proxy :: callbackCheck, в якому перевіряємо, чи присутній у відповіді слово "success". Якщо присутній, запам'ятовуємо цей proxy, як робочий.
В результаті буде виконано запит до файлу "responseproxy.php" через певний проксі, і якщо проксі робочий, ми отримаємо вміст файлу "responseproxy.php".

В даному класі також реалізована функція кешування перевірених проксі на добу. У методі loadFromCache проводиться йде перевірка, чи є збережені проксі за сьогоднішний день в папці tmp.
Збереження і читання кешу виробляється за допомогою класу Tmp, який представляю нижче:

Насправді Ви можете не використовувати цей клас, а трохи змінити клас Proxy під використання Redis або Memcashed.
Для використання цього класу Вам потрібно вказати встановити константу TMP, вказавши в неї шлях від кореня до папки, в якій Ви будете зберігати файли з збереженими proxy.