TrafficVeil
Боты 6 мин21 августа 2026 г.

Python Client: три разных UA под одним названием

«Python Client» в черновых списках выглядит как одна строка, но на деле это минимум три разных дефолтных User-Agent от разных библиотек — urllib, requests и urllib3, каждая со своим форматом. Разбираемся, почему грубый поиск по python/ неточен, как правильно сегментировать этот трафик и почему нетронутый python-заголовок чаще говорит о легитимном скрипте, чем о попытке спрятаться.

TV
TrafficVeil Team
Эксперты по защите веб-трафика
Содержание статьи
  1. 1. Что такое Python Client на самом деле
  2. 2. Зачем Python Client приходит на сайт
  3. 3. Нагрузка и риски
  4. 4. Как найти Python Client в логах
  5. 5. robots.txt для Python Client
  6. 6. Блокировка вручную и через TrafficVeil
  7. 7. Что делать: короткий алгоритм
  8. 8. С кем не путать Python Client
  9. 9. Стратегия allow/deny для Python Client
DDoS L7

DDoS атака что это простыми словами и как защитить сайт

Разобрали виды атак, признаки DDoS, последствия, уровни защиты, L7 DDoS и схему подключения TrafficVeil через DNS/reverse proxy.

Читать про DDoS

Энциклопедия ботов TrafficVeil

618 ботов с описаниями, паттернами User-Agent и фильтром по категориям — открытый справочник для аудита логов и настройки защиты.

Открыть справочник

Python Client в логах — как и aiohttp или go-http-client, это не один сервис с конкретным оператором, а технический отпечаток целого семейства Python-библиотек для HTTP-запросов. Причём внутри самого «python» скрывается не одна строка UA, а минимум три разных стандартных варианта в зависимости от того, какую именно библиотеку использует конкретный скрипт — это стоит учитывать уже на этапе поиска в логах.

1. Что такое Python Client на самом деле

В экосистеме Python нет единого «HTTP-клиента» — есть несколько широко используемых библиотек, и у каждой свой дефолтный User-Agent, если разработчик не задал собственный:

Python-urllib/3.11        — встроенный модуль urllib.request (стандартная библиотека)
python-requests/2.31.0    — сторонняя библиотека requests, самая популярная для HTTP в Python
python-urllib3/2.2.3      — библиотека urllib3, на которой построен requests и многие другие клиенты

Обратите внимание на формат: официальные дефолты используют дефис после «python» (python-requests/, python-urllib3/) или заглавную P с дефисом (Python-urllib/) — а не слэш сразу после «python», как в паттерне черновика. Поиск по буквальному python/ может пропустить часть реального трафика или, наоборот, зацепить что-то постороннее в зависимости от точной формы регулярного выражения — стоит перепроверить паттерн на реальных логах.

Параметр Значение
Название Python Client
Природа Семейство дефолтных UA нескольких Python-библиотек — не единый сервис и не компания
Основные варианты UA Python-urllib/X.Y (стандартная библиотека), python-requests/X.Y.Z (requests), python-urllib3/X.Y.Z (urllib3)
Оператор Не существует единого оператора — библиотеки используют неограниченное число независимых разработчиков и сервисов
Особенность Подмена UA на браузерную строку — buквально одна строка кода (headers={"User-Agent": "..."}), поэтому нетронутый дефолт — слабый, но реальный сигнал ненамеренной маскировки
robots.txt Полностью зависит от конкретного скрипта — у библиотек самих по себе нет встроенной политики
Пометка TrafficVeil Легитимный / Технические клиенты

2. Зачем Python Client приходит на сайт

  • внутренние скрипты компаний — парсинг курсов, синхронизация данных, автоматизация задач, написанные на Python как одном из самых популярных языков для скриптинга и data-задач;
  • API-интеграции — сторонний сервис, подключённый к вашему сайту, реализован на Python и использует requests/urllib для запросов;
  • мониторинг и автоматическое тестирование — скрипты проверки доступности или автоматические тесты, написанные на Python;
  • учебные и исследовательские скрипты — Python часто выбирают именно из-за низкого порога входа, поэтому здесь выше, чем у других языковых клиентов, доля непрофессиональных или разовых скриптов;
  • неаккуратные скрейперы — как и с любым языковым HTTP-клиентом, часть трафика может быть сбором данных теми, кто не позаботился о маскировке под браузер.

Типичный кейс: в аналитике фиксируется рост hits без реальных сессий, в access.log под этим временем преобладает один из python-UA на пагинации и карточках. Поскольку у семейства нет единого владельца, ключевой вопрос — не «кто такой Python Client», а какой конкретно скрипт стоит за конкретным IP.

3. Нагрузка и риски

Главный практический риск — фоновый шум в аналитике и расход CPU/bandwidth, искажающий статистику «живого» трафика. Поскольку Python — один из самых доступных языков для написания скриптов, здесь стоит учитывать более широкий разброс качества кода: от аккуратных интеграций с соблюдением rate-limit до наспех написанных скриптов без всякого ограничения частоты запросов.

Как и с другими языковыми HTTP-клиентами: подмена UA на строку браузера — тривиальная операция. Нетронутый python-UA в логах — слабый, но реальный сигнал легитимного внутреннего трафика или интеграции, а не целенаправленной маскировки. Прежде чем блокировать весь UA целиком, стоит учитывать, что под ним могут быть сразу несколько разных, никак не связанных источников — включая, возможно, собственный скрипт компании.

4. Как найти Python Client в логах

# Базовый поиск — все варианты сразу
grep -iE "python-requests|python-urllib|Python-urllib" /var/log/nginx/access.log

# Разбивка по конкретной библиотеке — помогает отличать разные скрипты
grep -oiE "python-requests/[0-9.]+|python-urllib3/[0-9.]+|Python-urllib/[0-9.]+" /var/log/nginx/access.log | sort | uniq -c | sort -rn

# Топ URL, которые вычитывает клиент
grep -iE "python-requests|python-urllib" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head

# Топ IP — здесь особенно важно, так как под одним семейством UA много разных источников
grep -iE "python-requests|python-urllib" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head

# Суточная активность
grep -iE "python-requests|python-urllib" /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1 | sort | uniq -c

Верификация. Подделать строку легко, но сам факт «честного» python-заголовка — слабый позитивный сигнал по той же логике, что и у aiohttp/go-http-client. Для решения allow/deny смотрите связку UA + IP/ASN + частоту + набор URL:

IP="1.2.3.4"
whois -h whois.cymru.com " -v $IP"
dig +short -x "$IP"

5. robots.txt для Python Client

# Жёсткий запрет по всем вариантам сразу
User-agent: python-requests
Disallow: /
User-agent: python-urllib3
Disallow: /
User-agent: Python-urllib
Disallow: /

# Разрешить всё
User-agent: python-requests
Allow: /

# Компромисс: закрыть личный кабинет и служебные разделы, оставить публичку
User-agent: python-requests
Disallow: /admin/
Disallow: /cart/
Disallow: /checkout/
Disallow: /account/
Disallow: /api/
Allow: /

Важно: под этими UA могут скрываться никак не связанные между собой клиенты, включая, возможно, собственный скрипт компании. Прежде чем ставить общий Disallow, стоит убедиться, что среди источников нет своей же интеграции.

6. Блокировка вручную и через TrafficVeil

Nginx:

if ($http_user_agent ~* "python-requests|python-urllib") {
    return 403;
}

limit_req_zone $binary_remote_addr zone=pythonclient:10m rate=10r/m;
location / {
    if ($http_user_agent ~* "python-requests|python-urllib") {
        limit_req zone=pythonclient burst=20 nodelay;
    }
}

Apache (.htaccess):

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} python-requests [NC,OR]
RewriteCond %{HTTP_USER_AGENT} python-urllib [NC]
RewriteRule ^ - [F,L]

TrafficVeil:

  • перед блокировкой по UA уточните у команды разработки, не завязана ли на python-клиент собственная интеграция или мониторинг;
  • если источников несколько и часть из них полезна — точнее блокировать по конкретным IP/ASN, а не по всему семейству UA сразу;
  • для разовых непонятных всплесков без явного вреда — rate-limit безопаснее полного deny;
  • после изменения сверьте логи: нежелательные хиты должны уйти в блок/лимит, а собственные интеграции (если есть) — продолжать работать штатно.

7. Что делать: короткий алгоритм

  • Убедитесь, что среди источников нет своего же скрипта или интеграции — единственный шаг, специфичный именно для этого семейства UA;
  • Пользы не найдено, источник чужой — Disallow/403 по всем вариантам UA сразу;
  • Источников несколько с разными целями — сегментируйте по IP/ASN вместо блокировки всего семейства;
  • Нагрузка мешает, но природа трафика не ясна — сначала rate-limit, полный запрет позже;
  • Не блокируйте по маске User-agent: *, чтобы не задеть Googlebot/YandexBot заодно.

8. С кем не путать Python Client

Бот / сосед Кластер UA Комментарий
aiohttp Client Технические клиенты aiohttp/ легитимный, асинхронный аналог для Python — та же логика «библиотека, не сервис», но отдельное семейство UA
Go Client Технические клиенты go-http-client легитимный, тот же принцип для экосистемы Go
OkHttp Технические клиенты okhttp легитимный, аналог для Java/Kotlin/Android
curl Технические клиенты curl/ легитимный, консольная утилита, а не библиотека приложений

9. Стратегия allow/deny для Python Client

Ситуация Действие
Источник — собственный скрипт или подключённая интеграция Allow, при необходимости закрыть только /admin /cart /api
Несколько разных источников под этим семейством UA, часть полезна Разделять по IP/ASN, не блокировать всё семейство целиком
Явно посторонний и мешает Disallow по всем трём вариантам UA + запрет в TrafficVeil
Нужен доступ, но пики нерегулярны Rate-limit на nginx/TrafficVeil
Подозрение на скрытный скрейпинг под этим UA Маловероятно технически — маскировка под браузер тривиальна, но проверяйте IP/ASN на всякий случай

Частые вопросы

Python Client — это один конкретный UA?

Нет, это минимум три разных дефолта: Python-urllib, python-requests и python-urllib3, каждый со своим форматом строки.

Почему поиск по python/ может не сработать?

Потому что реальные дефолты используют дефис после «python» (python-requests/, python-urllib3/), а не слэш сразу после названия.

Значит ли нетронутый python-заголовок, что бот безобиден?

Не гарантия, но слабый позитивный сигнал: подмена UA на браузерную строку — одна строка кода, и тот, кто хочет спрятаться, обычно так и делает.

Можно ли просто заблокировать весь трафик с этим UA?

Осторожно — под этим семейством может скрываться и чужой скрапер, и собственный внутренний скрипт или интеграция компании.

Почему у Python выше разброс качества скриптов, чем у других языков?

Из-за низкого порога входа язык часто выбирают для разовых и учебных задач, поэтому здесь больше скриптов без базовых ограничений частоты запросов.

Как отличить разные источники под одним семейством UA?

По связке IP/ASN, конкретной библиотеке и её версии в строке заголовка, а не по общему совпадению слова «python».

#Python Client#python-requests#urllib#User-Agent#технические клиенты#robots.txt#TrafficVeil
TV
TrafficVeil Team

Команда TrafficVeil разрабатывает инструменты защиты сайтов от ботов, DDoS и веб-атак.

Похожие статьи

Skype (общий токен): не один бот, а минимум три разных

Общий поиск по слову «skype» в логах цепляет сразу несколько разных, исторически связанных механизмов Microsoft — от закрытого в мае 2025 года превью-бота до активной внутренней инфраструктуры Teams, унаследовавшей кодовое имя SkypeSpaces. Разбираемся, почему общее правило блокировки по этому слову рискованно, и как разделить разные варианты в своих логах.

7 мин

Fedicabot: превью-fetcher Fedica, а не краулер Fediverse

Fedicabot принадлежит Fedica — крупной платформе публикации и аналитики соцсетей, а не имеет отношения к Fediverse, несмотря на созвучное название. Официальная страница оператора прямо заявляет: бот не обходит сайты целиком, а читает только страницу, которую указал конкретный пользователь при планировании публикации, — это меняет всю логику оценки риска.

6 мин

Amazon Kendra: возможно, ваш корпоративный поиск

Amazon Kendra — реальный сервис корпоративного поиска AWS, и его коннектор Web Crawler обходит только те конкретные URL, которые явно указал клиент AWS при настройке источника данных — то есть это не свободный обход, а целевая индексация по чьему-то заданию. Разбираемся, почему первый шаг здесь — проверить, не настроен ли на вашем сайте (или у партнёра) такой поисковый индекс, прежде чем блокировать бота как постороннего.

6 мин

Проверьте защиту своего сайта

Подключение занимает несколько минут. Начните с анализа трафика и включайте блокировки после проверки логов.