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
- Establezca una línea base: ¿cuál era la SR normal antes?
- Ejecute una prueba aislada (script anterior) con 100 solicitudes
- Verifique los registros: ¿qué códigos HTTP dominan? (407, 429, 403, ¿tiempos de espera?)
- Si 407: verifique usuario/contraseña y lista blanca de IP
- Si 429: agregue retraso entre solicitudes, use rotación de IP
- Si 403: verifique User-Agent, Referer, agregue encabezados realistas
- Si tiempos de espera: aumente el timeout, verifique RPS, use lógica de reintentos
- Verifique su código: manejo correcto de excepciones, tiempos de espera correctos
- Verifique el servidor de destino: ¿está disponible directamente (sin proxy)?
- 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:
- Verifique métricas y registros
- Aísle el problema (proxy vs servidor de destino vs su código)
- Determine el tipo de error (407, 429, 403, timeout)
- 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.