Volver al blog

Cómo diagnosticar la causa de la baja tasa de éxito

La tasa de éxito del proxy es una métrica crítica para cualquier proyecto. Analicemos cómo identificar la causa de la caída y restaurar la eficiencia.

📅3 de diciembre de 2025

Cómo diagnosticar la causa de una baja tasa de éxito: guía paso a paso

La tasa de éxito es el porcentaje de solicitudes exitosas del número total de intentos. Cuando este indicador cae por debajo de lo normal, se pierden dinero, tiempo y datos. Pero puede haber decenas de razones: desde una configuración incorrecta hasta bloqueos del servidor de destino. En este artículo, analizaremos un enfoque sistemático para el diagnóstico y encontraremos una solución.

Qué es la tasa de éxito y cuál es la norma

Tasa de éxito (SR) = (Solicitudes exitosas / Número total de solicitudes) × 100%

Los valores normales dependen del tipo de tarea:

Tarea SR normal Nivel crítico
Análisis de datos públicos 95–99% por debajo del 85%
Automatización SMM 90–97% por debajo del 80%
Verificación de anuncios 98–99.5% por debajo del 95%
Integración de API 99–99.9% por debajo del 98%

Si la SR cae un 5–10% de su línea base, es una señal para diagnosticar. Si cae un 20%+ es necesario actuar de inmediato.

Primeros pasos del diagnóstico

Paso 1: Verifique los registros y métricas

Recopile datos de las últimas 24–72 horas:

  • ¿Cuándo exactamente cayó la SR? (hora exacta)
  • ¿Qué porcentaje de solicitudes devuelve el error 407 (Proxy Authentication Required)?
  • ¿Qué porcentaje devuelve 429 (Too Many Requests)?
  • ¿Qué porcentaje son tiempos de espera (connection timeout)?
  • ¿Cambió la carga (RPS — solicitudes por segundo)?

Paso 2: Pruebe de forma aislada

Utilice un script simple para verificar el proxy sin su aplicación:

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"✓ Intento {i+1}: éxito")
        else:
            failed += 1
            print(f"✗ Intento {i+1}: estado {response.status_code}")
    except Exception as e:
        failed += 1
        print(f"✗ Intento {i+1}: {str(e)}")
    time.sleep(0.5)

sr = (success / (success + failed)) * 100
print(f"\nTasa de éxito: {sr:.1f}%")
print(f"Exitosas: {success}, Errores: {failed}")

Si esta prueba muestra una SR normal, el problema está en su código o configuración. Si la SR es baja incluso aquí, el problema está en el proxy o en el servidor de destino.

Problemas del lado del proxy

Error 407: Proxy Authentication Required

Causas:

  • Credenciales incorrectas (usuario/contraseña)
  • La cuenta ha expirado
  • La dirección IP no está en la lista blanca (si es necesario)
  • La rotación de IP no funciona o está deshabilitada

Solución:

import requests

# Formato correcto para proxies residenciales
proxy = "http://login:password@proxy-host:port"
proxies = {"http": proxy, "https": proxy}

# Prueba
response = requests.get("https://httpbin.org/ip", proxies=proxies, timeout=10)
print(response.text)

Sobrecarga del servidor proxy

Si todos los usuarios del servicio envían una gran cantidad de solicitudes simultáneamente, puede haber un límite de RPS (solicitudes por segundo). Esto es raro, pero sucede.

Verifique:

  • Su RPS actual en el pico
  • Los límites de su plan
  • Si hay errores 429 en los registros

Solución: agregue un retraso entre solicitudes o actualice su plan.

Calidad de las direcciones IP

Para proxies residenciales una SR baja puede significar que le están rotando direcciones bloqueadas. Verifique:

  • ¿Qué porcentaje de direcciones IP devuelve 403 Forbidden?
  • ¿Se repiten las mismas direcciones?
  • ¿Hay un patrón: un país/región funciona, otro no?

Bloqueos y filtros del servidor de destino

Error 429: Too Many Requests

El servidor de destino ve demasiadas solicitudes desde una IP o en general. Soluciones:

  • Agregue un retraso: `time.sleep(random.uniform(1, 3))`
  • Use rotación de IP: cada solicitud con una IP nueva
  • Reduzca RPS: envíe solicitudes secuencialmente, no en paralelo
  • Agregue encabezados realistas: User-Agent, Referer, Accept-Language

Error 403 Forbidden

El servidor bloqueó su IP (o la IP del proxy). Esto puede ser:

  • Filtro por geolocalización
  • Lista negra de servicios proxy
  • Detector de bots (JavaScript, CAPTCHA)

Solución: use proxies móviles o proxies residenciales con rotación. Son más difíciles de bloquear.

Error 403: Verificación de User-Agent

Algunos servicios rechazan solicitudes con User-Agent sospechosos:

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)

Errores en el código del cliente

Manejo incorrecto de excepciones

Error común: el código considera un error de conexión como una solicitud fallida, pero no intenta reconectarse:

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Forma correcta con reintentos
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"Error: {e}")
    # Registre y continúe con la siguiente solicitud

Tiempos de espera incorrectos

Si el tiempo de espera es demasiado corto (1–2 segundos), los proxies lentos serán rechazados:

  • Para análisis normal: 10–30 segundos
  • Para proxies móviles: 15–45 segundos
  • Para API: 5–10 segundos

Errores SSL/TLS

Si usa `verify=False`, esto puede enmascarar problemas reales. Es mejor actualizar los certificados:

import requests
import certifi

# Correcto
response = requests.get(
    url,
    proxies=proxies,
    verify=certifi.where(),  # En lugar de verify=False
    timeout=15
)

Problemas de red y tiempos de espera

Connection timeout vs Read timeout

La diferencia es importante:

  • Connection timeout: el proxy no responde (problema con el proxy o la red)
  • Read timeout: el servidor de destino envía datos lentamente (problema del servidor de destino)
import requests

# timeout = (connection_timeout, read_timeout)
try:
    response = requests.get(
        url,
        proxies=proxies,
        timeout=(5, 15)  # 5 seg para conectar, 15 para leer
    )
except requests.exceptions.ConnectTimeout:
    print("El proxy no responde")
except requests.exceptions.ReadTimeout:
    print("El servidor de destino es lento")

Problemas de DNS

Si el servidor de destino no se resuelve, este no es un error del proxy:

import socket

# Verifique DNS fuera del proxy
try:
    ip = socket.gethostbyname("target-site.com")
    print(f"Se resuelve: {ip}")
except socket.gaierror:
    print("Error de DNS — sitio no encontrado")

Lista de verificación de diagnóstico de SR baja

  1. Establezca una línea base: ¿cuál era la SR normal antes?
  2. Ejecute una prueba aislada (script anterior) con 100 solicitudes
  3. Verifique los registros: ¿qué códigos HTTP dominan? (407, 429, 403, ¿tiempos de espera?)
  4. Si 407: verifique usuario/contraseña y lista blanca de IP
  5. Si 429: agregue retraso entre solicitudes, use rotación de IP
  6. Si 403: verifique User-Agent, Referer, agregue encabezados realistas
  7. Si tiempos de espera: aumente el timeout, verifique RPS, use lógica de reintentos
  8. Verifique su código: manejo correcto de excepciones, tiempos de espera correctos
  9. Verifique el servidor de destino: ¿está disponible directamente (sin proxy)?
  10. Si nada más funciona: intente otro tipo de proxy o otro proveedor

Tabla de diagnóstico rápido

Código HTTP Causa probable Solución
407 Credenciales de proxy incorrectas Verifique usuario/contraseña, lista blanca de IP
429 Demasiadas solicitudes Agregue retraso, use rotación de IP
403 IP bloqueada o detector de bots Agregue encabezados realistas, use proxies móviles
Timeout Proxy lento o servidor de destino sobrecargado Aumente el timeout, verifique RPS
Connection refused Servidor proxy no disponible Verifique IP:puerto, estado del proxy

Conclusiones

Una baja tasa de éxito es un síntoma, no una enfermedad. Puede haber muchas causas: desde un error tipográfico en el código hasta un bloqueo del servidor de destino. El diagnóstico sistemático es la clave para la solución:

  1. Verifique métricas y registros
  2. Aísle el problema (proxy vs servidor de destino vs su código)
  3. Determine el tipo de error (407, 429, 403, timeout)
  4. Aplique la solución correspondiente

Para tareas que requieren confiabilidad y SR alta, se recomiendan proxies residenciales con rotación de IP. Son más difíciles de detectar y más estables. Pruebe gratis en proxycove.com y pruebe en su tarea.