Как диагностировать причину низкого success rate: пошаговое руководство
Success rate — это процент успешных запросов от общего числа попыток. Когда этот показатель падает ниже нормы, теряются деньги, время и данные. Но причин может быть десятки: от неправильной конфигурации до блокировок целевого сервера. В этой статье разберём систематический подход к диагностике и найдём решение.
Что такое success rate и какая норма
Success rate (SR) = (Успешные запросы / Общее количество запросов) × 100%
Нормальные значения зависят от типа задачи:
| Задача | Нормальный SR | Критический уровень |
|---|---|---|
| Парсинг публичных данных | 95–99% | ниже 85% |
| SMM-автоматизация | 90–97% | ниже 80% |
| Ad verification | 98–99.5% | ниже 95% |
| API интеграция | 99–99.9% | ниже 98% |
Если SR упал на 5–10% от вашей базовой линии — это сигнал к диагностике. Если упал на 20%+ — срочно нужны действия.
Первые шаги диагностики
Шаг 1: Проверьте логи и метрики
Соберите данные за последние 24–72 часа:
- Когда именно упал SR? (точное время)
- Какой процент запросов возвращает ошибку 407 (Proxy Authentication Required)?
- Какой процент — 429 (Too Many Requests)?
- Какой процент — таймауты (connection timeout)?
- Изменилась ли нагрузка (RPS — requests per second)?
Шаг 2: Тестируйте изолированно
Используйте простой скрипт для проверки прокси без вашего приложения:
import requests
import time
proxy = "http://proxy_ip:port"
proxies = {"http": proxy, "https": proxy}
target_url = "https://httpbin.org/ip"
success = 0
failed = 0
for i in range(100):
try:
response = requests.get(
target_url,
proxies=proxies,
timeout=10,
verify=False
)
if response.status_code == 200:
success += 1
print(f"✓ Попытка {i+1}: успех")
else:
failed += 1
print(f"✗ Попытка {i+1}: статус {response.status_code}")
except Exception as e:
failed += 1
print(f"✗ Попытка {i+1}: {str(e)}")
time.sleep(0.5)
sr = (success / (success + failed)) * 100
print(f"\nSuccess Rate: {sr:.1f}%")
print(f"Успешно: {success}, Ошибок: {failed}")
Если этот тест показывает нормальный SR — проблема в вашем коде или конфигурации. Если SR низкий даже здесь — проблема в прокси или целевом сервере.
Проблемы со стороны прокси
Ошибка 407: Proxy Authentication Required
Причины:
- Неправильные учётные данные (логин/пароль)
- Истёк срок действия аккаунта
- IP-адрес не в вайтлисте (если требуется)
- Ротация IP не работает или отключена
Решение:
import requests
# Правильный формат для резидентных прокси
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}
# Тест
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)
Перегруженность прокси-сервера
Если все пользователи сервиса отправляют огромное количество запросов одновременно, может быть ограничение по RPS (requests per second). Это редко, но бывает.
Проверьте:
- Ваш текущий RPS в пике
- Лимиты вашего тарифа
- Есть ли ошибки 429 в логах
Решение: добавьте задержку между запросами или обновите тариф.
Качество IP-адресов
Для резидентных прокси низкий SR может означать, что вам ротируют заблокированные адреса. Проверьте:
- Какой процент IP-адресов возвращает 403 Forbidden?
- Повторяются ли одни и те же адреса?
- Есть ли паттерн — одна страна/регион работает, другая нет?
Блокировки и фильтры целевого сервера
Ошибка 429: Too Many Requests
Целевой сервер видит слишком много запросов с одного IP или в целом. Решения:
- Добавьте задержку: `time.sleep(random.uniform(1, 3))`
- Используйте ротацию IP: каждый запрос — новый IP
- Снизьте RPS: отправляйте запросы последовательно, не параллельно
- Добавьте реалистичные заголовки: User-Agent, Referer, Accept-Language
Ошибка 403 Forbidden
Сервер заблокировал ваш IP (или IP прокси). Это может быть:
- Фильтр по геолокации
- Чёрный список прокси-сервисов
- Детектор бота (JavaScript, CAPTCHA)
Решение: используйте мобильные прокси или резидентные прокси с ротацией. Они сложнее для блокировки.
Ошибка 403: Проверка User-Agent
Некоторые сервисы отклоняют запросы с подозрительными User-Agent:
import requests
import random
user_agents = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15"
]
headers = {
"User-Agent": random.choice(user_agents),
"Accept-Language": "en-US,en;q=0.9",
"Accept": "text/html,application/xhtml+xml",
"Referer": "https://google.com"
}
response = requests.get(
"https://target-site.com",
headers=headers,
proxies={"http": proxy, "https": proxy},
timeout=10
)
print(response.status_code)
Ошибки в коде клиента
Неправильная обработка исключений
Частая ошибка: код считает ошибку соединения за неудачный запрос, но не пытается переподключиться:
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
# Правильный способ с retries
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["GET", "POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)
try:
response = session.get(url, proxies=proxies, timeout=10)
except requests.exceptions.RequestException as e:
print(f"Ошибка: {e}")
# Логируем и переходим к следующему запросу
Неправильные таймауты
Если таймаут слишком короткий (1–2 секунды), медленные прокси будут отклоняться:
- Для обычного парсинга: 10–30 секунд
- Для мобильных прокси: 15–45 секунд
- Для API: 5–10 секунд
SSL/TLS ошибки
Если используете `verify=False`, это может маскировать реальные проблемы. Лучше обновить сертификаты:
import requests
import certifi
# Правильно
response = requests.get(
url,
proxies=proxies,
verify=certifi.where(), # Вместо verify=False
timeout=15
)
Сетевые проблемы и таймауты
Connection timeout vs Read timeout
Разница важна:
- Connection timeout: прокси не отвечает (проблема с прокси или сетью)
- Read timeout: целевой сервер медленно отправляет данные (проблема целевого сервера)
import requests
# timeout = (connection_timeout, read_timeout)
try:
response = requests.get(
url,
proxies=proxies,
timeout=(5, 15) # 5 сек на подключение, 15 на чтение
)
except requests.exceptions.ConnectTimeout:
print("Прокси не отвечает")
except requests.exceptions.ReadTimeout:
print("Целевой сервер медленный")
DNS-проблемы
Если целевой сервер не резолвится, это не ошибка прокси:
import socket
# Проверьте DNS вне прокси
try:
ip = socket.gethostbyname("target-site.com")
print(f"Резолвится: {ip}")
except socket.gaierror:
print("DNS ошибка — сайт не найден")
Чек-лист диагностики низкого SR
- Установите базовую линию: какой SR был нормальным раньше?
- Запустите изолированный тест (скрипт выше) с 100 запросами
- Проверьте логи: какие HTTP-коды доминируют? (407, 429, 403, таймауты?)
- Если 407: проверьте логин/пароль и вайтлист IP
- Если 429: добавьте задержку между запросами, используйте ротацию IP
- Если 403: проверьте User-Agent, Referer, добавьте реалистичные заголовки
- Если таймауты: увеличьте timeout, проверьте RPS, используйте retry-логику
- Проверьте свой код: правильная обработка исключений, правильные таймауты
- Проверьте целевой сервер: доступен ли он прямо (без прокси)?
- Если всё остальное не помогло: попробуйте другой тип прокси или другой провайдер
Таблица быстрой диагностики
| HTTP-код | Вероятная причина | Решение |
|---|---|---|
| 407 | Неправильные учётные данные прокси | Проверьте логин/пароль, вайтлист IP |
| 429 | Слишком много запросов | Добавьте задержку, используйте ротацию IP |
| 403 | IP заблокирован или детектор бота | Добавьте реалистичные заголовки, используйте мобильные прокси |
| Timeout | Прокси медленный или целевой сервер перегружен | Увеличьте timeout, проверьте RPS |
| Connection refused | Прокси-сервер недоступен | Проверьте IP:port, статус прокси |
Итоги
Низкий success rate — это симптом, а не болезнь. Причин может быть много: от опечатки в коде до блокировки целевым сервером. Систематическая диагностика — ключ к решению:
- Проверьте метрики и логи
- Изолируйте проблему (прокси vs целевой сервер vs ваш код)
- Определите тип ошибки (407, 429, 403, timeout)
- Примените соответствующее решение
Для задач, требующих надёжности и высокого SR, рекомендуются резидентные прокси с ротацией IP. Они сложнее для обнаружения и более стабильны. Попробуйте бесплатный тест на proxycove.com и протестируйте на своей задаче.