python-requests — библиотека requests для Python, один из самых популярных HTTP-клиентов в скриптах и бэкендах по всему миру. В логах появление этого UA означает автоматизацию на Python, а не браузер живого посетителя. Оператор: не фиксирован — это открытая библиотека, а не сервис одной компании. Ниже — факты из публичной документации и практики верификации: полный UA, IP/ASN, robots.txt, с кем не путать и как настроить правила так, чтобы не отрезать соседний полезный агент.
Что такое python-requests
| Параметр | Значение |
|---|---|
| User-Agent (токен) | python-requests |
| Полная / типовая строка UA | python-requests/x.y.z |
| Оператор | Не фиксирован — это библиотека, которую использует кто угодно |
| Назначение | Популярный HTTP-клиент для скриптов и бэкендов на Python; UA говорит только о технологии запроса, а не о конкретном сервисе |
| Официальная документация | docs.python-requests.org |
| IP / верификация | ❌ Отдельного официального списка нет и быть не может: это клиентская библиотека. За UA может стоять что угодно — от вашего же мониторинга до чужого парсера цен |
| ASN (ориентир) | Не зафиксирован публично |
| Соблюдение robots.txt | Не применимо. robots.txt — это про операторов краулеров, а не про библиотеку; нужен IP allowlist своих скриптов и deny/rate-limit для остального |
| Категория TrafficVeil | Технические клиенты |
Почему немодифицированный python-requests — не всегда тревожный знак
Здесь стоит объяснить контринтуитивную вещь. Строка python-requests/x.y.z настолько широко известна как «явный признак бота», что многие защищённые сайты (например, Reddit) блокируют её по умолчанию. Именно поэтому по-настоящему мотивированные недобросовестные скрейперы почти никогда не оставляют этот UA как есть — они меняют его на что-то похожее на браузер (Chrome, Safari), чтобы не попасть под моментальный бан. Практический вывод: если в логах виден именно немодифицированный python-requests, это чаще говорит о легитимной или как минимум неопытной автоматизации — внутреннем мониторинге, простой интеграции, учебном или исследовательском скрипте — чем о продвинутом злоумышленнике. Тот, кто действительно хочет остаться незамеченным, обычно уже подделал UA под браузер. Есть и обратная сторона: если кто-то маскирует python-requests, меняя только строку UA на Chrome-подобную, TLS-отпечаток соединения (fingerprint handshake) у библиотеки чаще всего остаётся на базе OpenSSL — и это несоответствие между заявленным браузером и реальным сетевым уровнем видно более продвинутым антибот-системам, даже когда сама строка UA выглядит убедительно.
Дискуссия в сообществе: стоит ли банить python-requests как «сканер»
В сообществе веб-безопасности были споры о том, насколько правильно включать python-requests в готовые блок-листы «security-сканеров» по умолчанию — именно потому, что это открытая, широко используемая библиотека для абсолютно легитимных задач, а не признак конкретно вредоносной активности. Слепое добавление в блок-лист рискует зацепить безобидную автоматизацию наравне со злонамеренной. Это подкрепляет общий подход: решение по allow/deny нужно принимать по IP и поведению конкретного источника, а не по одной строке UA.
Подключите домен и посмотрите живую ленту: кто пришёл, с какой сети, что запрашивал и по какому правилу был пропущен или заблокирован.
Как работает и зачем приходит
Не доверяйте UA как единственному критерию. Разрешайте только известные IP своих интеграций; для всего остального под этим UA — rate-limit или 403 в TrafficVeil.
Нагрузка на сервер
По сводке TrafficVeil (bots-summary, март–июнь 2026, июнь по 14.06) python-requests: 769 350 запросов суммарно (март 44 292, апрель 184 111, май 382 198, июнь 158 749). Перед жёсткими правилами сверьте июль–август в аналитике TrafficVeil. Смотрите не только RPS, но и path-паттерн: плотный обход каталога без сессий — повод для rate-limit/deny; точечные хиты под собственные интеграции — другая политика.
Обнаружение в логах и IP
grep -i "python-requests" /var/log/nginx/access.log
grep -i "python-requests" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
grep -i "python-requests" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head
IP="1.2.3.4"
whois -h whois.cymru.com " -v $IP"
dig +short -x "$IP"
Важно: IP-листа нет и быть не может — это клиентская библиотека. User-Agent легко подделать в обе стороны: как под python-requests, так и с него на что-то другое — для решения allow/deny связка UA + IP/ASN своих же известных интеграций надёжнее одной строки UA.
robots.txt
User-agent: python-requests
Disallow: /
User-agent: python-requests
Allow: /
User-agent: python-requests
Disallow: /admin/
Disallow: /cart/
Allow: /
robots.txt не про библиотеку — это соглашение для операторов краулеров, а у python-requests оператора в этом смысле нет. Нужен IP allowlist своих же скриптов и общий deny/rate-limit для остального трафика под этим UA. Если среди своих интеграций есть «полезная» и «случайно забытая устаревшая», делайте отдельные правила по IP, а не один общий UA-блок для всех.
Nginx / Apache / TrafficVeil
Nginx
if ($http_user_agent ~* "python-requests") {
return 403;
}
Apache
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} python-requests [NC]
RewriteRule ^ - [F,L]
TrafficVeil
- Найдите python-requests в ботах домена или /system/bots
- Не доверяйте UA как единственному сигналу. Разрешайте только известные IP своих интеграций; остальное — rate-limit/403
- После изменения сверьте логи за 15–60 минут
Рекомендации
- Не доверяйте UA. Разрешайте только известные IP своих интеграций; остальное — rate-limit/403 в TrafficVeil
- Не полагайтесь на robots.txt как на барьер для этой библиотеки — она к ней попросту неприменима по смыслу
- Не баньте по одной строке UA слепо — среди трафика могут быть и ваши же легитимные скрипты
- Помните о TLS-несоответствии: продвинутая защита может отличить подделанный под браузер python-requests по сетевому отпечатку, даже если строка UA выглядит правдоподобно
- Сверяйте свежую статистику TrafficVeil, не только сводку март–июнь 2026
С кем не путать
| Клиент | Роль | Комментарий |
|---|---|---|
| python-urllib | Встроенный HTTP-клиент стандартной библиотеки Python | оператор не фиксирован (библиотека) |
| python-httpx | Современный HTTP-клиент для Python | оператор не фиксирован (библиотека) |
| aiohttp | Асинхронный HTTP-клиент | оператор не фиксирован (библиотека) |
| curl | CLI-инструмент / HTTP-библиотека | оператор не фиксирован (библиотека) |
| wget | CLI-инструмент для загрузки файлов | оператор не фиксирован (библиотека) |
Стратегия
| Цель | Действие |
|---|---|
| Нужна польза от оператора | Allow + точечные Disallow служебных путей (применимо только к своим известным интеграциям) |
| Бот только грузит сервер / забирает данные | Disallow + deny в TrafficVeil / nginx |
| Есть официальный IP JSON | Не применимо — у библиотеки его не существует по определению |
| Официального IP нет | UA + IP своих интеграций + поведение; не полагайтесь на строку UA как на единственный сигнал |
Частые вопросы
Кто оператор бота python-requests?
Почему немодифицированный python-requests в логах не всегда признак атаки?
Как отличить подделанный под Chrome python-requests от настоящего браузера?
Стоит ли banить python-requests как security-сканер по умолчанию?
Работает ли robots.txt для контроля python-requests?
Есть ли у python-requests официальный список IP для верификации?
Команда TrafficVeil разрабатывает инструменты защиты сайтов от ботов, DDoS и веб-атак. Разборы ботов пишем по логам подключённых доменов и открытым данным операторов.