Назад к блогу

Как диагностировать причину низкого success rate

Success rate прокси — критический метрика для любого проекта. Разберёмся, как определить причину падения и восстановить эффективность.

📅3 декабря 2025 г.

Как диагностировать причину низкого 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

  1. Установите базовую линию: какой SR был нормальным раньше?
  2. Запустите изолированный тест (скрипт выше) с 100 запросами
  3. Проверьте логи: какие HTTP-коды доминируют? (407, 429, 403, таймауты?)
  4. Если 407: проверьте логин/пароль и вайтлист IP
  5. Если 429: добавьте задержку между запросами, используйте ротацию IP
  6. Если 403: проверьте User-Agent, Referer, добавьте реалистичные заголовки
  7. Если таймауты: увеличьте timeout, проверьте RPS, используйте retry-логику
  8. Проверьте свой код: правильная обработка исключений, правильные таймауты
  9. Проверьте целевой сервер: доступен ли он прямо (без прокси)?
  10. Если всё остальное не помогло: попробуйте другой тип прокси или другой провайдер

Таблица быстрой диагностики

HTTP-код Вероятная причина Решение
407 Неправильные учётные данные прокси Проверьте логин/пароль, вайтлист IP
429 Слишком много запросов Добавьте задержку, используйте ротацию IP
403 IP заблокирован или детектор бота Добавьте реалистичные заголовки, используйте мобильные прокси
Timeout Прокси медленный или целевой сервер перегружен Увеличьте timeout, проверьте RPS
Connection refused Прокси-сервер недоступен Проверьте IP:port, статус прокси

Итоги

Низкий success rate — это симптом, а не болезнь. Причин может быть много: от опечатки в коде до блокировки целевым сервером. Систематическая диагностика — ключ к решению:

  1. Проверьте метрики и логи
  2. Изолируйте проблему (прокси vs целевой сервер vs ваш код)
  3. Определите тип ошибки (407, 429, 403, timeout)
  4. Примените соответствующее решение

Для задач, требующих надёжности и высокого SR, рекомендуются резидентные прокси с ротацией IP. Они сложнее для обнаружения и более стабильны. Попробуйте бесплатный тест на proxycove.com и протестируйте на своей задаче.