Por qué algunos sitios web no se abren a través de proxy: guía completa
Los proxies son una herramienta indispensable para web scraping, pruebas, automatización SMM y eludir restricciones geográficas. Pero a veces, en lugar de contenido, ves un error 403, timeout o una página en blanco. Descubramos por qué sucede esto y cómo solucionarlo.
1. Detección y bloqueo de proxy
Esta es la razón más común. Las aplicaciones web modernas utilizan servicios especiales para detectar tráfico de proxy. El sitio analiza:
- ASN (Número de Sistema Autónomo) — muchos proveedores de proxy utilizan rangos de ASN conocidos que son fáciles de bloquear
- Comportamiento del usuario — cambio imposiblemente rápido entre IP, ausencia de cookies, patrones de clics extraños
- Huellas dactilares TLS — los navegadores envían datos únicos sobre la versión SSL, extensiones, orden de cifrado
- Huellas dactilares WebGL y Canvas — incluso JavaScript puede revelar el uso de proxy
Ejemplo: El sitio ve que en 10 segundos se cargaron 100 páginas de productos desde tu IP. Claramente no es una persona — el bloqueo es inevitable.
2. Restricciones geográficas
El sitio verifica la geolocalización de la IP y deniega el acceso si no coincide con las expectativas:
- Los bancos y servicios financieros bloquean el acceso desde ciertos países
- Los servicios de streaming (Netflix, YouTube) restringen contenido por regiones
- Los sitios gubernamentales pueden no estar disponibles desde el extranjero
- Las plataformas de comercio electrónico cambian el idioma y la moneda según la IP
Si utilizas un proxy de centro de datos de EE.UU., pero el sitio requiere acceso solo desde Europa, obtendrás un error 403 o redirección.
3. Reputación de la dirección IP
Cada IP tiene un historial. Si la dirección se utilizó anteriormente para spam, scraping o ataques DDoS, los sitios la bloquearán:
- Listas negras — la IP se incluye en bases de datos como Project Honey Pot, Spamhaus, AbuseIPDB
- Puntuación baja en servicios como IPQualityScore — los sitios utilizan estos servicios para filtrar
- Infracciones anteriores — si la IP ya fue bloqueada en el sitio, puede permanecer en la lista negra durante mucho tiempo
Puedes verificar la reputación de la IP en abuseipdb.com o ipqualityscore.com.
4. Encabezados incorrectos y configuración
A menudo, los sitios bloquean solicitudes debido a encabezados HTTP ausentes o incorrectos:
| Encabezado | Problema |
|---|---|
User-Agent |
Ausente o extraño (como Python-requests/2.25.1) |
Referer |
No coincide con la lógica de navegación del sitio |
Accept-Language |
Ausente o no coincide con la geolocalización de IP |
X-Forwarded-For |
Revela el uso de proxy o VPN |
Solución: Utiliza encabezados de navegador reales. Aquí hay un ejemplo en Python:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-US,en;q=0.5',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'keep-alive',
'Upgrade-Insecure-Requests': '1'
}
proxy = 'http://your-proxy:port'
response = requests.get('https://example.com',
headers=headers,
proxies={'http': proxy, 'https': proxy})
5. Problemas de protocolo y puertos
Algunos proxies solo soportan HTTP, pero intentas acceder a un sitio HTTPS. O el puerto está bloqueado a nivel de red:
- HTTP vs HTTPS — asegúrate de que el proxy soporta ambos protocolos
- Puertos — estándar 80 (HTTP) y 443 (HTTPS), pero algunos sitios usan puertos no estándar
- SOCKS vs HTTP — diferentes tipos de proxy tienen diferentes limitaciones
Consejo: Si el sitio no se abre a través de un proxy HTTP, intenta SOCKS5. Funciona en un nivel más bajo y es mejor para eludir algunas restricciones.
6. Limitación de velocidad y protección DDoS
Si realizas muchas solicitudes seguidas, incluso a través de diferentes IP, el sitio puede bloquearte:
- 429 Too Many Requests — excediste el límite de solicitudes
- Bloqueo temporal — generalmente de 1 a 24 horas
- Bloqueo permanente — si continúas atacando el servidor
- Cloudflare, WAF — sistemas de protección especializados que distinguen bots de humanos
7. Soluciones prácticas
✓ Utiliza proxies residenciales en lugar de centros de datos
Los proxies residenciales son direcciones IP reales de usuarios domésticos. Son mucho más difíciles de detectar porque se ven como tráfico normal. Los centros de datos a menudo se bloquean porque su ASN es conocido.
✓ Añade retrasos entre solicitudes
import time
import random
for url in urls:
response = requests.get(url, headers=headers, proxies=proxies)
# Retraso aleatorio de 1 a 5 segundos
time.sleep(random.uniform(1, 5))
✓ Rota proxies
No uses la misma IP para todas las solicitudes. Cambia entre diferentes direcciones:
proxies_list = [
'http://proxy1:port',
'http://proxy2:port',
'http://proxy3:port',
]
for i, url in enumerate(urls):
proxy = proxies_list[i % len(proxies_list)]
response = requests.get(url, proxies={'http': proxy, 'https': proxy})
✓ Verifica la IP antes de usarla
Asegúrate de que la IP no esté en una lista negra:
import requests
def check_ip_reputation(ip):
response = requests.get(f'https://ipqualityscore.com/api/json/ip/{ip}')
data = response.json()
return data.get('fraud_score', 0)
# Usa solo IP con puntuación baja
if check_ip_reputation(proxy_ip) < 75:
# IP es segura
pass
✓ Utiliza automatización de navegador para sitios complejos
Si el sitio usa JavaScript y protección compleja, las solicitudes HTTP normales no funcionarán. Usa Selenium o Puppeteer:
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('--proxy-server=http://proxy:port')
driver = webdriver.Chrome(options=options)
driver.get('https://example.com')
✓ Utiliza proxies móviles para sitios móviles
Los proxies móviles funcionan a través de redes móviles reales (4G/5G). Son más confiables para aplicaciones móviles y a menudo no se bloquean en sitios que restringen el acceso desde PC.
✓ Maneja errores correctamente
try:
response = requests.get(url, proxies=proxies, timeout=10)
response.raise_for_status()
except requests.exceptions.ProxyError:
print("Error de proxy — la IP puede estar bloqueada")
except requests.exceptions.Timeout:
print("Timeout — el servidor no responde")
except requests.exceptions.HTTPError as e:
if response.status_code == 403:
print("Acceso denegado — intenta otro proxy")
Resumen
Los sitios bloquean proxies por diferentes razones: desde la detección de patrones de tráfico hasta la simple reputación de la IP. No hay una solución universal, pero una combinación de buenos proxies, encabezados correctos, retrasos y rotación de IP resolverá la mayoría de los problemas.
Para web scraping y automatización se recomienda utilizar proxies residenciales de calidad que se vean como tráfico real de usuarios domésticos. Son más caros que los centros de datos, pero funcionan de manera más confiable y rara vez se bloquean.