Rotador de Proxies
Usa esta habilidad cuando un raspador deba distribuir solicitudes entre varios proxies y dejar de golpear a aquellos que han fallado. El rotador entrega el siguiente proxy saludable, cuenta los fallos y pone un proxy en un período de enfriamiento después de fallar demasiadas veces; luego le da otra oportunidad. Tú proporcionas la lista de proxies; no se incluye ninguna.
Cuándo invocar
- El usuario dice: "rotar proxies", "distribuir solicitudes entre proxies", "dejar de recibir bloqueos por IP", "reintentar a través de otro proxy".
- El código en la conversación realiza muchas solicitudes salientes y necesita distribuirlas entre un grupo de proxies.
Cuándo NO invocar
- Una sola conexión es suficiente, o el objetivo permite explícitamente tu volumen; rotar proxies añade complejidad innecesaria.
- La intención es evadir un bloqueo explícito o abusar de un servicio; mantén el uso dentro de los términos del objetivo.
Ejemplo concreto
Entrada del usuario:
Tengo 5 proxies. Distribúyelos en round-robin y salta los que empiecen a fallar.
Salida:
import requests
from rotator import ProxyRotator
rot = ProxyRotator.from_env() # PROXY_POOL="http://h1:8080,socks5://h2:1080,..."
for url in urls:
p = rot.get() # siguiente proxy saludable
try:
r = requests.get(url, proxies=p.as_dict(), timeout=15)
rot.report(p, ok=r.ok) # retroalimenta el resultado para que el grupo se autosane
except Exception:
rot.report(p, ok=False) # demasiados fallos -> puesto en enfriamiento
Patrón a aplicar
- Carga los proxies desde el entorno o un archivo ignorado por git; nunca confirmes URLs de proxy reales ni credenciales.
- Siempre llama a
report(proxy, ok=...)después de cada solicitud para que los proxies fallidos se pongan en enfriamiento automáticamente. - Ajusta
max_failsycooldownsegún el objetivo; un enfriamiento corto recupera proxies intermitentes, uno largo elimina los malos. - Ejecuta
health_checkantes de un lote grande para descartar proxies muertos de antemano. - Maneja el error "no hay proxies saludables" — retrocede y reintenta en lugar de detener la ejecución.
Referencia: assets/rotator.py.
Fuente
Destilado del uso en producción en los proyectos de automatización del autor. v1.0.0. Ver también: [[playwright-login-session]], [[pipeline-orchestrator]], [[cron-dispatch]].
→ Construye el bot completo y ejecutable con Trawlkit.