El proxy no soporta el protocolo necesario: qué hacer
Configuraste el proxy, iniciaste el script y recibiste un error como "Protocol not supported" o "Connection refused". El problema de incompatibilidad de protocolos es más común de lo que parece. Analizaremos por qué sucede y cómo resolver la tarea sin cambiar de proveedor.
Protocolos utilizados por los proxies
Antes de resolver el problema, es importante comprender la diferencia entre los protocolos. Cada uno tiene su área de aplicación y limitaciones.
| Protocolo | Puertos por defecto | Características |
|---|---|---|
| HTTP | 80, 8080, 3128 | Solo tráfico HTTP, puede modificar encabezados |
| HTTPS (CONNECT) | 443, 8443 | Tunelización a través de HTTP CONNECT, cifrado |
| SOCKS4 | 1080 | Conexiones TCP, sin autenticación, sin UDP |
| SOCKS5 | 1080, 1081 | TCP y UDP, autenticación, DNS a través del proxy |
Conflictos típicos:
- Selenium y Puppeteer requieren HTTP/HTTPS, y usted tiene SOCKS5
- Los bots de Telegram funcionan a través de SOCKS5, pero el proxy solo admite HTTP
- Los clientes de Torrent requieren SOCKS5 con UDP, pero el proxy es SOCKS4
- Las aplicaciones de juegos requieren UDP, y los proxies HTTP no lo admiten
Diagnóstico: determinar el protocolo del proxy
Si el proveedor no especificó el protocolo o tiene dudas, verifique el proxy usted mismo.
Verificación con curl
Probando el protocolo HTTP:
# Proxy HTTP
curl -x http://proxy_ip:port http://httpbin.org/ip
# Con autenticación
curl -x http://user:pass@proxy_ip:port http://httpbin.org/ip
Probando SOCKS5:
# Proxy SOCKS5
curl -x socks5://proxy_ip:port http://httpbin.org/ip
# SOCKS5 con DNS a través del proxy (socks5h)
curl -x socks5h://proxy_ip:port http://httpbin.org/ip
Si el comando devuelve la dirección IP del proxy, el protocolo se ha determinado correctamente. Un error como Connection refused o Unsupported proxy indica que el protocolo es incorrecto.
Verificación con Python
import requests
proxy_ip = "proxy_ip:port"
# Prueba HTTP
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"http://{proxy_ip}"},
timeout=10)
print(f"HTTP funciona: {r.json()}")
except Exception as e:
print(f"HTTP no funciona: {e}")
# Prueba SOCKS5 (requiere pip install requests[socks])
try:
r = requests.get("http://httpbin.org/ip",
proxies={"http": f"socks5://{proxy_ip}"},
timeout=10)
print(f"SOCKS5 funciona: {r.json()}")
except Exception as e:
print(f"SOCKS5 no funciona: {e}")
Detección automática
Script para iterar sobre los protocolos:
import requests
def detect_protocol(proxy_address):
protocols = ["http", "https", "socks4", "socks5", "socks5h"]
for proto in protocols:
try:
proxies = {
"http": f"{proto}://{proxy_address}",
"https": f"{proto}://{proxy_address}"
}
r = requests.get("http://httpbin.org/ip",
proxies=proxies, timeout=5)
if r.status_code == 200:
return proto
except:
continue
return None
result = detect_protocol("proxy_ip:port")
print(f"Protocolo detectado: {result}")
Conversión de HTTP a SOCKS y viceversa
Si el proxy admite un protocolo diferente al que necesita su software, utilice un convertidor local.
Privoxy: HTTP → SOCKS
Privoxy acepta solicitudes HTTP y las dirige a través de un proxy SOCKS.
Instalación:
# Ubuntu/Debian
sudo apt install privoxy
# macOS
brew install privoxy
# Windows — descargar del sitio oficial
Configuración (archivo /etc/privoxy/config):
# Escuchar en el puerto local 8118 (HTTP)
listen-address 127.0.0.1:8118
# Reenviar a través de SOCKS5 externo
forward-socks5 / socks_proxy_ip:1080 .
# Con autenticación
forward-socks5 / user:pass@socks_proxy_ip:1080 .
Ahora su software se conectará a 127.0.0.1:8118 mediante HTTP, y el tráfico se enrutará a través de SOCKS5.
Gost: convertidor universal
Gost es una herramienta potente para cualquier transformación de protocolos.
# Proxy HTTP en la entrada → SOCKS5 en la salida
gost -L http://:8080 -F socks5://socks_proxy_ip:1080
# SOCKS5 en la entrada → HTTP en la salida
gost -L socks5://:1080 -F http://http_proxy_ip:8080
# Con autenticación en ambos extremos
gost -L http://local_user:local_pass@:8080 \
-F socks5://remote_user:remote_pass@proxy_ip:1080
Convertidor en Python
Un convertidor minimalista para tareas sencillas:
# pip install pproxy
# HTTP en la entrada, SOCKS5 en la salida
pproxy -l http://:8080 -r socks5://proxy_ip:1080
# SOCKS5 en la entrada, HTTP en la salida
pproxy -l socks5://:1080 -r http://proxy_ip:8080
Configuración de túneles locales
A veces, la conversión no es suficiente; se necesita un túnel completo.
Túnel SSH a través de proxy HTTP
Si tiene un servidor SSH y un proxy HTTP, puede crear un SOCKS5:
# Crear un SOCKS5 en localhost:1080 a través del proxy HTTP
ssh -D 1080 -o ProxyCommand="nc -X connect -x http_proxy:8080 %h %p" user@ssh_server
Stunnel para HTTPS
Si necesita un proxy HTTPS, pero solo tiene HTTP:
# stunnel.conf
[https-proxy]
client = yes
accept = 127.0.0.1:8443
connect = http_proxy_ip:8080
protocol = connect
protocolHost = target_host:443
Configuración del software para el protocolo disponible
A veces es más fácil configurar el software para el protocolo disponible que convertirlo.
Selenium con diferentes protocolos
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
# Proxy HTTP (método estándar)
options = Options()
options.add_argument('--proxy-server=http://proxy_ip:8080')
# Proxy SOCKS5
options.add_argument('--proxy-server=socks5://proxy_ip:1080')
# Para Firefox con SOCKS5
from selenium.webdriver.firefox.options import Options as FirefoxOptions
profile = webdriver.FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.socks", "proxy_ip")
profile.set_preference("network.proxy.socks_port", 1080)
profile.set_preference("network.proxy.socks_version", 5)
aiohttp con SOCKS
# pip install aiohttp-socks
import aiohttp
from aiohttp_socks import ProxyConnector
async def fetch_with_socks():
connector = ProxyConnector.from_url('socks5://proxy_ip:1080')
async with aiohttp.ClientSession(connector=connector) as session:
async with session.get('http://httpbin.org/ip') as response:
return await response.json()
Bots de Telegram a través de HTTP
Si la biblioteca de Telegram requiere SOCKS5, pero usted tiene HTTP:
# python-telegram-bot con proxy HTTP
from telegram.ext import ApplicationBuilder
application = (
ApplicationBuilder()
.token("YOUR_TOKEN")
.proxy_url("http://proxy_ip:8080") # Funciona con HTTP
.build()
)
Consejo: Muchas bibliotecas modernas admiten ambos protocolos. Revise la documentación; es posible que solo necesite cambiar el esquema de URL de
socks5://ahttp://.
Cómo elegir un proxy con el protocolo correcto
Para evitar problemas de protocolo, defina los requisitos con antelación.
Matriz de compatibilidad
| Tarea | Protocolo recomendado | Por qué |
|---|---|---|
| Web scraping | HTTP/HTTPS | Amplia compatibilidad, configuración sencilla |
| Automatización de navegadores | HTTP o SOCKS5 | Depende del navegador y el framework |
| Bots de Telegram, Discord | SOCKS5 | Requisitos de las librerías |
| Torrents | SOCKS5 con UDP | DHT y PEX utilizan UDP |
| Juegos, VoIP | SOCKS5 con UDP | Baja latencia, tráfico UDP |
| Solicitudes API | HTTP/HTTPS | Las API REST funcionan a través de HTTP |
A considerar al elegir un proveedor
- Lista de protocolos admitidos — debe estar especificado claramente
- Capacidad de cambio — algunos proveedores permiten el acceso a una IP a través de diferentes puertos/protocolos
- Soporte UDP para SOCKS5 — no todos los proxies SOCKS5 admiten UDP
- Documentación de configuración — ejemplos para diferentes lenguajes y herramientas
Los proxies residenciales generalmente admiten HTTP/HTTPS y SOCKS5 simultáneamente, lo que elimina la mayoría de los problemas de compatibilidad. Los proxies de centro de datos suelen estar limitados a HTTP/HTTPS.
Lista de verificación antes de la compra
- Determine qué protocolo requiere su software
- Verifique si necesita soporte UDP (juegos, torrents, VoIP)
- Confirme con el proveedor el soporte del protocolo necesario
- Solicite acceso de prueba para verificar la compatibilidad
- Prepare un plan B: un convertidor local
Conclusión
La incompatibilidad de protocolos es un problema solucionable. En la mayoría de los casos, un convertidor local como Privoxy o Gost es suficiente. Para proyectos a largo plazo, es más rentable elegir un proxy que admita el protocolo necesario desde el principio.
Para tareas que requieren flexibilidad en la elección del protocolo, los proxies residenciales con acceso multiprotocolo son adecuados; más detalles en proxycove.com.