Skip to content

About

CLI для проверки списков прокси: параллельные проверки, ретраи, лимит запросов, определение геолокации, вывод в таблицу, JSON и CSV.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

11 Commits

Folders and files

Repository files navigation

proxy-validator

Быстрый конкурентный проверщик прокси. Для каждого прокси из списка он сообщает, работает ли он, выходной IP, страну / город / провайдера / часовой пояс (через GeoIP-сервис, совместимый с ip-api), задержку и подсказку локали (например, DE → de-DE), которая пригодится, когда нужно подогнать Accept-Language под страну прокси при скрапинге или тестах локализации.

Всё началось со 100-строчного последовательного скрипта (один прокси в секунду, time.sleep(1)), который затем переписали в небольшой устанавливаемый пакет с тестами.

Что изменилось по сравнению с исходным скриптом

Исходный скрипт Эта версия
Последовательно, пауза 1 с после каждого прокси Пул потоков (--workers), результаты сохраняют порядок ввода
Только ip:port:login:password → login:password@ip:port Разбирает host:port, host:port:user:pass, user:pass@host:port, scheme://…; пароли могут содержать : или @
URL прокси для HTTPS строился как https://proxy (неверная схема) Корректный URL прокси для каждой схемы; учётные данные URL-кодируются
Учётные данные выводились в консоль Пароли везде маскируются; --reveal включается явно
print результатов, запись в файл закомментирована Вывод table, json, csv, txt, --only-valid, корректные коды возврата
Случайно читал HTTP(S)_PROXY из окружения Прокси из окружения игнорируются (trust_env=False)
Любой сбой → «невалиден» Различные причины: ошибка авторизации (407), таймаут, сбой соединения, ошибки гео-сервиса, лимит запросов
Без тестов 46 тестов, включая встроенный в процесс поддельный прокси-сервер (сеть не нужна)

Установка

uv sync                  # создаёт .venv, ставит пакет и dev-инструменты

Для SOCKS-прокси нужен дополнительный extra: uv run --with "requests[socks]" proxy-validator ....

Использование

uv run proxy-validator examples/proxies.example.txt
uv run proxy-validator proxies.txt -w 50 -t 5 --only-valid
uv run proxy-validator proxies.txt -f json -o result.json
uv run proxy-validator proxies.txt -f txt -o working.txt      # полные URL рабочих прокси
cat proxies.txt | uv run proxy-validator - -f csv
PROXY                       STATUS  MS   EXIT IP        COUNTRY  CITY    LOCALE
demo:***@203.0.113.11:3128  ok      412  198.51.100.7   DE       Berlin  de-DE
203.0.113.10:8080           fail: timeout while connecting  -  -  -  -

Коды возврата: 0 — работает хотя бы один прокси, 1 — не работает ни один, 2 — некорректные входные данные.

Параметры

Флаг Значение
-w, --workers число параллельных проверок (по умолчанию 20)
-t, --timeout секунд на запрос (по умолчанию 8)
-r, --retries число повторов при сетевых ошибках (по умолчанию 1)
--min-interval глобальная минимальная задержка между стартами запросов, для гео-API с ограничением частоты
--geo-url любой ip-api-совместимый эндпоинт (бесплатный тариф ip-api.com работает только по HTTP)
-f, --format table (по умолчанию), json, csv, txt
--only-valid скрыть нерабочие прокси
--reveal включить учётные данные в json/csv (по умолчанию маскируются)

Как библиотека

from proxy_validator import parse_proxy_list, validate_all

proxies, errors = parse_proxy_list(open("proxies.txt").read())
for result in validate_all(proxies, workers=30):
    if result.ok:
        print(result.proxy.masked, result.exit_ip, result.country_code, result.locale)

Как это тестируется

tests/fake_proxy.py — это HTTP-прокси на ~100 строк, который притворяется GeoIP-сервисом. Поскольку клиент отправляет GET http://host/path обычному HTTP-прокси, весь стек (авторизация на прокси, таймауты, HTTP 429/500, некорректный JSON, недоступный прокси, конкурентность и порядок результатов) проверяется сквозным образом, не обращаясь к интернету.

uv sync
uv run pytest

Примечания

  • Проверяйте только те прокси, которые вам разрешено использовать, и соблюдайте условия GeoIP-провайдера, на который указывает --geo-url.
  • Примеры адресов взяты из диапазонов для документации (RFC 5737); это не настоящие прокси.

Лицензия

MIT

About

CLI для проверки списков прокси: параллельные проверки, ретраи, лимит запросов, определение геолокации, вывод в таблицу, JSON и CSV.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages