VDS Хостинг для Ваших проектов

Самописный прокси чекер на CURL

Декабрь 22nd, 2016 Рубрики: Интернет, Мини

Иногда у меня возникает надобность работать с некоторыми сайтами через прокси. Для этой цели кстати удобно использовать условные прокси через HandyCache. И вот самый неудобный момент – это поиск хорошего рабочего прокси конкретно под нужный мне сайт. Раньше для этой задачи я использовал GatherProxy. Этот бесплатный прокси-чекер выделялся среди программ своего рода тем, что проверял работу проксей именно проверяя загрузку задаваемого пользователем сайта и поиском определённого ключевого слова. Также показывал скорость работы серверов, страну. В общем всё было чики-пики до недавнего времени. К сожалению в программу эту разработчики засунули коварную проверку связи со своими серверами, а когда те перестали работать, GatherProxy просто отказывался работать отключаясь.

Многочисленные же онлайн чекеры прокси выполняют слишком примитивную проверку типа пинга, не проверяя реальную работоспособность прокси, тем более с конкретным сайтом. В результате из списков только что проверенных проксей онлайн реально работают всего до 10%. И пробовать каждый вручную пока набредёшь на рабочий – это настоящий кошмар! Поэтому решил наконец написать под свои нужды простой чекер прокси в виде BAT-скрипта, который используя cURL проверяет прокси из списка на работоспособность с конкретным сайтом, т.е. по URL. Результаты получились неплохие несмотря на примитивность скрипта, поэтому решил поделиться с читателями блога этой наработкой.

Итак, сначала тексты чекера для Windows в виде BAT-ника:

@echo off
setlocal enabledelayedexpansion
For /F "eol=# delims=" %%i In (%1) Do (
curl -0 -f -k -s -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" --anyauth --compressed -L  --connect-timeout 3 --max-time 10 --max-redirs 2 --socks5 %%i "https://www.facebook.com/index.php" > NUL
if !ERRORLEVEL! EQU 0 echo. %%i
)

exit /b 0

и шелл под Linux решил сделать:

#!/bin/bash
if [ "$#" -eq "0" ]
then echo "The input list is not specified!"
exit 0
fi
while read I; do
     [ -z "$I" ] && continue
     curl -0 -f -k -s -A "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0" --anyauth --compressed -L  --connect-timeout 3 --max-time 10 --max-redirs 2 --socks5 $I "https://www.facebook.com/index.php" >/dev/null
     if [ $? -eq 0 ]
     then echo "$I"
     fi
done < $1
exit 0

Теперь объясняю как пользоваться для тех кто в танке, остальные и так сообразят ;) Итак, первым делом скачать (ссылка в конце поста) и распаковать в какую-нибудь папку cURL (Windows). В Линуксе установить через консоль, если ещё не установлен. Дальше берём скрипт из архива или копируем текст скрипта выше и сохранив через блокнот с расширением bat обязательно, и файл с расширением .bat кладём в папку с curl’ом, там где curl.exe. В линуксах скрипт сохранить надо с расширением .sh в любом каталоге, но добавить ему права на исполнение командой: chmod +x so5.sh

В принципе скрипт готов к работе. Первым аргументом ему передаётся файл со списком проксей такого вида:
123.45.67.89:1080
123.45.67.90:1081
т.е. в формате IP:порт. Если ваш список содержит ещё что-то, то эти лишние данные надо убрать. Для этой цели может подойти даже элементарная функция замены текста в блокноте Ctrl+H. Результат работы, рабочие прокси, по мере проверки скрипт выводит на консоль. Однако на практике удобно перенаправить вывод в файл, который после окончания работы скрипта будет содержать список работающих прокси. Выглядит это так: в командной строке пишем:

so5 proxies.txt > work.txt

proxies.txt – это файл со списком проксей для проверки, work.txt – список работающих (будет создан если не существует или перезаписан).

Настройка под себя

Что можно или даже нужно менять? Ну первым делом значения параметров (красным в скрипте) –connect-timeout (время отзыва) и –max-time (время на обработку запроса). С их помощью можно задать порог быстроты прокси. Например, если какой-то сервер будет отвечать через 4 сек, то наш чекер не дождётся ответа и забракует такой медленный прокси-сервер как неподходящий. Вторым делом – адрес тестовой страницы. В образце выше это главная страница Facebook (синим). Вы туда должны вставить URL той страницы, которую хотите посещать через прокси. Именно для этого я и составил этот скрипт. Ведь если один сайт грузится через данный прокси, это ещё не значит что и другой будет. Вместо опции –socks5 можно использовать –socks4/–proxy для проверки других типов проксей, поскольку данный вариант проверяет только SOCKS5 типы.

Несколько слов о недостатках

  • Главный недостаток – это однопоточность. Обработка большого списка требует много времени, а с увеличением допустимых параметров –connect-timeout и –max-time время проверки будет совсем большим, особенно при медленных и нерабочих проксях.
  • Входной файл должен содержать корректный список в строгом формате и с допустимыми значениями IP и портов, иначе результаты могут быть совсем не те, поскольку проверка на корректность не выполняется.
  • Ну и отсутствует любой индикатор прогресса, поэтому тяжело понять, сколько уже проверено и сколько осталось.

И ещё неплохо было бы какой-нибудь API прикрутить для определения ГЕО по IP.

В заключение хочу обратить внимание, что несмотря на в целом хорошую работу, были два случая, когда через определённый прокси-сервер CURL успешно загружает страницу, однако в браузере он не работает совсем. Как такое выходит и чем вызвано – я так и не смог выяснить, буду рад если подскажете.

Скачать прокси чекер BAT и SH
Скачать cURL
Понравился пост? Поделись с другими!
Теги: , , , ,
Комментариев пока нет.

Написать комментарий

   b2bbonbone