Un proxy es un conjunto de cinco datos: un esquema, un nombre de usuario, una contraseña, un host y un puerto. Los proveedores, las herramientas y los foros organizan esas piezas en distintos órdenes, y un proxy que funciona en una herramienta falla en otra simplemente porque se pegó con la forma equivocada. Esta guía muestra los formatos habituales, qué herramientas esperan cuál, y cómo evitar los errores que vemos más a menudo con proxies residenciales.
Los cinco formatos habituales
Aquí está el mismo proxy de Shifter en los cinco formatos que el Proxy Generator de nuestro panel puede generar. El nombre de usuario lleva el targeting y la sesión, así que es más largo de lo que cabría esperar.
| Formato | Ejemplo |
|---|---|
scheme://user:pass@host:port | http://customer-USERNAME-sid-a1-ttl-60:PASSWORD@p.shifter.io:443 |
user:pass@host:port | customer-USERNAME-sid-a1-ttl-60:PASSWORD@p.shifter.io:443 |
host:port:user:pass | p.shifter.io:443:customer-USERNAME-sid-a1-ttl-60:PASSWORD |
user:pass:host:port | customer-USERNAME-sid-a1-ttl-60:PASSWORD:p.shifter.io:443 |
host:port@user:pass | p.shifter.io:443@customer-USERNAME-sid-a1-ttl-60:PASSWORD |
El primero es una URL real, definida por los estándares web, y es la opción más segura siempre que una herramienta la acepte. Los demás son convenciones. Existen porque muchas herramientas masivas importan listas de texto plano, un proxy por línea, y cada herramienta eligió su propio orden.
Qué herramientas esperan cuál
curl. Pasa la forma URL a -x. Si omites el esquema, curl asume http://. También puedes mantener las credenciales separadas con -U username:password, lo que evita problemas de codificación. Nuestra guía de configuración de curl y Postman tiene ejemplos completos.
Python requests y Scrapy. Ambos aceptan la forma URL. En requests, las claves del diccionario nombran el esquema del sitio web, y los valores nombran el proxy, así que ambos suelen apuntar a un proxy http://:
proxy = "http://customer-USERNAME:PASSWORD@p.shifter.io:443"
proxies = {"http": proxy, "https": proxy}
Playwright. Toma las partes como campos separados: server con el esquema, host y puerto, más username y password. Separarlos tú mismo evita cualquier problema de codificación.
Puppeteer y Chrome. El flag --proxy-server toma solo host y puerto. Las credenciales se pasan mediante page.authenticate().
Gestores de perfiles de navegador y herramientas masivas. Muchos importan listas en formato host:port:user:pass, y algunos preguntan qué orden usa tu lista. Comprueba la pantalla de importación antes de pegar unos cientos de líneas.
El esquema describe el proxy, no el sitio web
Este es el error más común que vemos. Un cliente que hace scraping de sitios web HTTPS escribe https:// delante del proxy, y todas las peticiones fallan con un error de TLS.
El esquema le indica a tu cliente cómo hablar con el proxy. Se accede a un sitio web HTTPS a través de un proxy http:// con el método CONNECT: el cliente pide al proxy que abra un túnel, y luego ejecuta TLS con el sitio web a través de él. La conexión con el sitio web sigue cifrada de extremo a extremo. Escribir https://p.shifter.io:443 le pide al cliente que inicie TLS con la propia pasarela, y nuestra pasarela no ofrece eso, así que el handshake falla. Usa http:// tanto para sitios HTTP como HTTPS, o socks5:// si tu herramienta prefiere SOCKS.
Con SOCKS hay una segunda elección. socks5:// resuelve el nombre del sitio web en tu máquina, mientras que socks5h:// envía el nombre al proxy para que lo resuelva. Si te importa dónde ocurren las consultas DNS, lee nuestra guía para prevenir fugas de DNS.
Los caracteres especiales rompen los formatos
Cada formato reserva algunos caracteres.
- Forma URL:
@,:,/,#,?y%dentro de un nombre de usuario o contraseña deben codificarse con porcentaje. Una contraseña comop@ss:wordse convierte enp%40ss%3Aword. - Formas separadas por dos puntos: un dos puntos dentro de la contraseña desplaza todos los campos que vienen después, así que la herramienta lee el host o el puerto equivocados.
Las partes de targeting y sesión de un nombre de usuario de Shifter usan solo letras, dígitos, guiones y guiones bajos, por ejemplo city-new_york, así que son seguras en todos los formatos. Si estableces una contraseña con símbolos, la forma URL con codificación, o una herramienta con campos separados, es la vía fiable.
Conversión entre formatos
Cuando una herramienta te da un formato y tu código necesita otro, convierte la lista en lugar de editar las líneas a mano. Esta función de Python convierte cualquiera de los cinco formatos en la forma URL y codifica las credenciales:
from urllib.parse import quote
def to_proxy_url(line: str, scheme: str = "http") -> str:
line = line.strip()
if "://" in line:
return line
if "@" in line:
left, right = line.split("@", 1)
if left.rsplit(":", 1)[-1].isdigit():
hostport, creds = left, right # host:port@user:pass
else:
creds, hostport = left, right # user:pass@host:port
user, password = creds.split(":", 1)
host, port = hostport.rsplit(":", 1)
else:
parts = line.split(":")
if len(parts) != 4:
raise ValueError(f"unrecognised proxy line: {line}")
if parts[1].isdigit():
host, port, user, password = parts # host:port:user:pass
else:
user, password, host, port = parts # user:pass:host:port
return f"{scheme}://{quote(user, safe='')}:{quote(password, safe='')}@{host}:{port}"
print(to_proxy_url("p.shifter.io:443:customer-USERNAME:PASSWORD"))
# http://customer-USERNAME:PASSWORD@p.shifter.io:443
Decide el orden encontrando el número de puerto, así que no puede distinguir los formatos cuando un nombre de usuario o contraseña es todo dígitos. En ese caso, pregunta a quien te dio la lista qué orden usa.
Los proxies ISP usan las mismas formas
Los proxies ISP siguen las mismas reglas con un host diferente. Todo proxy ISP se conecta a través de isp.shifter.io:443, así que una línea en formato host:port:user:pass se lee isp.shifter.io:443:USERNAME:PASSWORD. Cada proxy se distingue por su nombre de usuario, no por una IP y un puerto separados por proxy, lo que sorprende a quienes están acostumbrados a listas de ip:port:user:pass.
Comprobaciones rápidas cuando un proxy no conecta
- 407 Proxy Authentication Required: se alcanzó el proxy pero las credenciales no se aceptaron. Comprueba si falta o están invertidos el nombre de usuario y la contraseña, o si hay un símbolo sin codificar. Nuestra guía de solución de errores 407 cubre el resto.
- Errores de TLS o de handshake de inmediato: probablemente escribiste
https://delante del proxy. Cámbialo ahttp://. - Connection refused o timeouts en todas las peticiones: el host o el puerto son incorrectos, a menudo porque una línea separada por dos puntos se leyó en el orden equivocado.
- Funciona en curl, falla en tu herramienta: la herramienta espera un formato distinto. Convierte la línea, o introduce los campos por separado.
En el panel, el Proxy Generator te permite elegir el protocolo y el formato antes de copiar, y descarga una lista completa en CSV en el mismo formato. Elegir la forma correcta desde el principio evita la mayoría de estos errores.
Fuentes y referencias
- RFC 3986, Uniform Resource Identifier: Generic Syntax: rfc-editor.org
- curl, la opción —proxy: curl.se
- Requests, proxies: requests.readthedocs.io
- Playwright, HTTP proxy: playwright.dev