Proxies

Cómo Usar un Proxy con cURL (-x, Autenticación, SOCKS5 y Rotación)

24 ago 202611 min de lectura

Estás en una terminal y necesitas un solo comando para enrutar una petición cURL a través de un proxy, ahora mismo, copiar y pegar. Esta guía te da exactamente eso: las flags de proxy de curl, los tres protocolos, la autenticación, las variables de entorno, una configuración permanente, la rotación y una tabla real de error-a-solución - probada en curl 8.x en agosto de 2026. Sin relleno y sin embudo de ventas de un proveedor. Si ya conoces cURL y solo quieres la sintaxis de proxy más las trampas que otras páginas omiten, estás en el lugar correcto.

Última actualización: 24 de agosto de 2026. Probado en curl 8.x; estas flags se han mantenido estables en las versiones recientes de curl, pero ejecuta curl --version para confirmar la tuya.

TL;DR: el comando de una línea

Pasa tu proxy a cURL con -x (o su gemelo idéntico --proxy):

curl -x http://USER:PASS@HOST:PORT https://example.com

-x y --proxy son la misma flag. Si omites el scheme, cURL asume http://; si omites el puerto, asume 1080. Cada comando de abajo es una variación de esa única línea.

Lo que necesitas antes de empezar

Para ejecutar cualquier comando de aquí necesitas cuatro valores, que todo proveedor de proxy te entrega en su panel:

HOST:PORT            # the endpoint, e.g. p.webshare.io:80
USERNAME:PASSWORD    # your proxy credentials

Esos cuatro valores son todo lo que cURL necesita. Si no tienes un endpoint activo para probar, consigue uno antes de seguir leyendo - los comandos no valen nada sin un proxy real detrás de ellos. Webshare tiene un plan gratuito genuino (10 proxies, sin tarjeta) que se reclama rápido justo para este tipo de pruebas, y te entrega una cadena simple host:port:user:pass que entra directo en -x. Puedes conseguir proxies gratis para probar en un par de minutos. (Webshare es un socio afiliado; consulta nuestra divulgación de afiliados. Eso no cambia ni el precio que pagas ni los comandos de abajo.)

En mis propias pruebas con curl, pego el endpoint de sticky-session directo desde el panel de Webshare en lugar de armar a mano una línea de gateway rotativo, así que el host, el puerto y las credenciales llegan como una sola cadena lista que entra en -x. No he fijado esto a una versión específica de curl - cualquier curl razonablemente reciente maneja estas flags de la misma forma - así que usa el que venga con tu sistema.

Sintaxis básica de proxy en cURL: la flag -x / --proxy

Las dos formas son intercambiables, así que elige la que puedas recordar:

# These two lines are identical
curl -x http://HOST:PORT https://example.com
curl --proxy http://HOST:PORT https://example.com

cURL rellena dos valores por defecto que sorprenden a la gente. Omite el scheme y asume un proxy HTTP; omite el puerto y asume 1080:

# No scheme -> HTTP proxy is assumed
curl -x HOST:PORT https://example.com

# No port -> 1080 is assumed (so this targets HOST:1080)
curl -x http://HOST https://example.com

Sé explícito en los scripts. Escribir el http://HOST:PORT completo evita la sorpresa de "¿por qué está pegando al puerto 1080?" más adelante.

Proxies HTTP, HTTPS y SOCKS5 con cURL

El scheme delante de HOST:PORT le dice a cURL cómo hablar con el proxy. Esto es independiente de si tu URL objetivo es https.

Tipo de proxyEjemplo de flag
Proxy HTTP-x http://HOST:PORT
Proxy HTTPS (TLS hacia el proxy)-x https://HOST:PORT
SOCKS5, DNS local-x socks5://HOST:PORT
SOCKS5, DNS remoto-x socks5h://HOST:PORT

Proxies HTTP y HTTPS

# Reach an https site through a plain HTTP proxy - this is normal
curl -x http://HOST:PORT https://example.com

# Proxy that itself speaks TLS
curl -x https://HOST:PORT https://example.com

Fíjate en los dos niveles de TLS. http:// frente a https:// en el valor de -x describe el salto de ti al proxy; el https:// en la URL objetivo es el salto del proxy al sitio. La mayoría de los proxies de datacenter usan un scheme http:// incluso cuando estás obteniendo páginas https, así que empieza por ahí.

SOCKS5 y la distinción entre socks5:// y socks5h://

curl -x socks5://HOST:PORT https://example.com
curl --socks5 HOST:PORT https://example.com     # same thing

# Let the PROXY resolve the hostname (remote DNS)
curl -x socks5h://HOST:PORT https://example.com

Aquí está el detalle que la mayoría de las guías omite. Con socks5://, cURL resuelve el hostname objetivo en tu máquina y le envía al proxy una dirección IP. Con socks5h://, cURL envía el hostname y el proxy hace la consulta DNS. Usa socks5h:// siempre que quieras que el DNS ocurra en la salida, por ejemplo para evitar fugas de DNS local o para resolver un nombre que solo existe en la red del proxy.

Autenticación de proxy en cURL (-U / --proxy-user)

La mayoría de los proxies de pago requieren un nombre de usuario y una contraseña. Dos formas de proporcionarlos:

# Dedicated flag (-U is short for --proxy-user)
curl -x http://HOST:PORT -U USER:PASS https://example.com
curl -x http://HOST:PORT --proxy-user USER:PASS https://example.com

# Credentials embedded in the proxy URL
curl -x http://USER:PASS@HOST:PORT https://example.com

La trampa que causa la mayoría de los errores 407: cuando incrustas las credenciales en la URL, cualquier carácter especial de la contraseña debe codificarse en URL, o cURL lee mal la cadena y el proxy te rechaza. Codifica @ como %40, : como %3A, # como %23, y así sucesivamente:

# Password is  p@ss:word  ->  encode it in the URL
curl -x "http://user:p%40ss%3Aword@HOST:PORT" https://example.com

# Or sidestep encoding entirely with -U (quote it for the shell)
curl -x http://HOST:PORT -U 'user:p@ss:word' https://example.com

La forma -U solo divide en el primer dos puntos, así que un dos puntos dentro de la contraseña no es problema ahí. --proxy-user también funciona para la autenticación SOCKS5, no solo HTTP.

Definir un proxy con variables de entorno (HTTP_PROXY / HTTPS_PROXY)

Define el proxy una vez en tu shell y cada llamada de cURL en esa sesión lo usa. La sintaxis difiere según el shell, que es donde los tutoriales multiplataforma suelen equivocarse.

# Unix / macOS (bash, zsh)
export http_proxy="http://USER:PASS@HOST:PORT"
export https_proxy="http://USER:PASS@HOST:PORT"
export NO_PROXY="localhost,127.0.0.1,.internal.example.com"
curl https://example.com
# Windows PowerShell (curl is an alias here - call curl.exe)
$env:HTTP_PROXY = "http://USER:PASS@HOST:PORT"
$env:HTTPS_PROXY = "http://USER:PASS@HOST:PORT"
curl.exe https://example.com
:: Windows cmd.exe
set HTTP_PROXY=http://USER:PASS@HOST:PORT
set HTTPS_PROXY=http://USER:PASS@HOST:PORT
curl https://example.com

Dos cosas que saber. Para la variable HTTP simple, cURL lee solo la minúscula http_proxy (una elección de seguridad deliberada); HTTPS_PROXY y NO_PROXY funcionan en cualquier caja. Y NO_PROXY (o la flag --noproxy por llamada) lista los hosts que deben evitar el proxy. Un -x por petición siempre sobrescribe lo que haya definido el entorno:

# Ignore the env proxy for these hosts
curl --noproxy example.com,localhost https://example.com

# -x wins over the environment variables for this one call
curl -x http://OTHER_HOST:PORT https://example.com

Hacer que cURL siempre use un proxy (.curlrc)

Para un proxy que usas constantemente, ponlo en el archivo de configuración de cURL para no volver a escribir la flag. En Unix y macOS eso es ~/.curlrc; en Windows es _curlrc en tu directorio home o en %APPDATA%\_curlrc. Añade una línea:

# ~/.curlrc  (or  %APPDATA%\_curlrc  on Windows)
proxy = "http://USER:PASS@HOST:PORT"

Ahora cada comando de cURL pasa por ese proxy automáticamente. Para evitarlo en una sola llamada sin editar el archivo, desactiva el proxy en la propia línea:

curl --noproxy '*' https://example.com   # ignore the config proxy
curl -x '' https://example.com           # empty proxy = direct connection

Rotar proxies por petición

Dos patrones honestos cubren casi toda necesidad de rotación. El primero usa el gateway rotativo de un proveedor - un único endpoint que te entrega una nueva IP de salida en cada petición, así que solo lo llamas en un bucle:

# Rotating gateway endpoint (Webshare exposes one at p.webshare.io:80;
# check your dashboard for the exact host and rotation setting)
for i in $(seq 1 5); do
  curl -s -x http://USER:[email protected]:80 https://ipinfo.io/ip
done

El segundo te da control total recorriendo tu propio archivo de lista de proxies, un -x por línea. Webshare y la mayoría de los proveedores te dejan exportar la lista en formato host:port:user:pass, que se parsea de forma limpia:

# proxies.txt: one  host:port:user:pass  per line
while IFS=: read -r host port user pass; do
  curl -s -x "http://$user:$pass@$host:$port" https://ipinfo.io/ip
done < proxies.txt

Haz scraping de forma responsable. Extrae solo datos públicos, respeta el robots.txt y los términos de servicio de cada sitio, modera tu tasa de peticiones y mantente lejos de todo lo que esté detrás de un inicio de sesión. Eso es buena práctica, no asesoría legal - revisa las reglas de tu propio proyecto y jurisdicción. Si la rotación es el corazón de tu flujo de trabajo, nuestras guías sobre proxies rotativos y proxies para web scraping profundizan más de lo que puede un fragmento de código.

Verificar que cURL está usando el proxy (comprueba tu IP)

Nunca supongas que el proxy funcionó. Pregúntale a un servicio de echo qué IP vio el sitio en realidad:

# Should print the proxy's exit IP, not yours
curl -x http://USER:PASS@HOST:PORT https://ipinfo.io/ip
curl -x http://USER:PASS@HOST:PORT http://httpbin.org/ip

# See the proxy handshake and CONNECT line
curl -v -x http://USER:PASS@HOST:PORT https://example.com

Compara el resultado con una llamada directa (curl https://ipinfo.io/ip sin proxy). Si las dos IPs difieren, el proxy está funcionando; si coinciden, cURL sigue saliendo directo y tu -x o variable de entorno no se está aplicando. La salida de -v muestra la línea CONNECT hacia el proxy, que es la forma más rápida de confirmar la ruta.

Errores comunes de proxy en cURL y cómo solucionarlos

ErrorCausa probableSolución
407 Proxy Authentication RequiredCredenciales ausentes o incorrectas, o un carácter especial en una contraseña incrustada en la URL que no se codificóAñade -U 'user:pass', o codifica la contraseña en URL (@ -> %40, : -> %3A)
curl: (7) Couldn't connect to proxyHost, puerto o scheme incorrectosVuelve a comprobar HOST:PORT; prueba http:// frente a socks5://; confirma que el proxy está activo y accesible
curl: (56) / error de certificado SSL a través de un proxy HTTPSEl certificado TLS del proxy no es de confianzaSolo para pruebas, añade --proxy-insecure o apunta --proxy-cacert a la CA; arregla el certificado como es debido en producción
El sitio se resuelve contra tu DNS local en SOCKS5Usar socks5:// cuando querías DNS remotoCambia a socks5h:// para que el proxy resuelva el hostname
La petición se cuelga o nunca retornaProxy muerto o un objetivo lentoAñade --connect-timeout 10 y --max-time 30 para fallar rápido

Nueve de cada diez reportes de "el proxy de curl no funciona" son la primera fila: un 407 por una contraseña sin codificar. Recurre a -U antes que a cualquier otra cosa.

¿Qué tipo de proxy deberías usar con cURL?

cURL trata todos los proxies igual, así que la elección es sobre el objetivo, no sobre la herramienta. La orientación honesta en tres líneas:

  • Proxies de datacenter - los más rápidos y baratos, pero más fáciles de detectar, así que mejores para scraping de alto volumen de sitios públicos poco defendidos.
  • Proxies residenciales - más difíciles de bloquear porque parecen usuarios domésticos reales, pero más caros y normalmente facturados por GB.
  • Proxies ISP (residencial estático) - el término medio: la velocidad de un datacenter con una IP estable y con aspecto de residencial.

Para un desarrollador que solo quiere un endpoint simple que entre en curl -x y un plan gratuito para probar, Webshare es la opción de buena relación calidad-precio - bajo costo, amigable para desarrolladores y una cadena host:port:user:pass sin envoltorio con el que pelear. No es la única opción: Bright Data, Oxylabs e IPRoyal operan redes residenciales más grandes o más especializadas por si las necesitas (ten en cuenta que Oxylabs es dueña de Webshare, así que trátalas como relacionadas, no como rivales independientes). Puedes empezar con los proxies gratuitos de Webshare, o comparar todo el mercado en nuestro hub de mejores servicios de proxy.

Preguntas frecuentes

¿cURL admite proxies SOCKS5?

Sí. Usa -x socks5://HOST:PORT o --socks5 HOST:PORT. Cambia a socks5h:// cuando quieras que el proxy, y no tu máquina, resuelva el hostname objetivo (DNS remoto).

¿Cómo defino un proxy solo para peticiones HTTPS?

Define la variable de entorno https_proxy (o HTTPS_PROXY) y deja http_proxy sin definir, para que solo se enrute el tráfico https. Para una sola llamada, basta con añadir -x al comando https y nada más.

¿Cómo hago que cURL ignore el proxy en una petición?

Usa curl --noproxy '*' URL o curl -x '' URL. Cualquiera de las dos sobrescribe una variable de entorno o un proxy del .curlrc para esa única llamada y conecta directamente.

¿Por qué mi proxy en cURL devuelve 407?

Un 407 significa que el proxy rechazó tus credenciales. O no pasaste un nombre de usuario y contraseña, o un carácter especial en una contraseña incrustada en la URL no se codificó en URL. Añade -U 'user:pass', o codifica la contraseña (@ se convierte en %40).

¿Puedo rotar IPs con cURL?

Sí, de dos formas: llama al endpoint de gateway rotativo de un proveedor en un bucle para obtener una nueva IP en cada petición, o recorre tu propio archivo de lista de proxies con un -x por línea. Para el mismo trabajo en Python, consulta usar un proxy con Python requests.

J

Jasmine

Autora · Jasmine Daily

La autora detrás de Jasmine Daily, anotando pensamientos, experiencias y momentos cotidianos. Honesta, sin prisa, imperfecta.

Jasmine Daily

Hay más esperando a ser leído.

Si este texto te llegó, explora algunas páginas más del diario.

Leer a continuación

Entradas relacionadas