Cómo usar cURL con proxies

Usa esta guía detallada completa con fragmentos de código para ayudarte a iniciar tu viaje con cURL con proxies.
14 min read
Using proxies with cURL featured image

En esta publicación, trataremos:

¿Qué es cURL?

cURL, abreviatura de «URL cliente», es una herramienta para enviar y recibir datos a través de Internet mediante URL. Como proyecto de software, proporciona una biblioteca (libcurl) y una herramienta de línea de comandos (curl). Aquí nos centraremos en curl, la herramienta de línea de comandos para transferir datos mediante la sintaxis de URL. 

El proyecto admite una amplia gama de protocolos, incluidos HTTP, HTTPS, FTP, FTPS, SFTP, POP3, POP3S, IMAP, IMAPS, LDAP, LDAPS, SCP, etc. Esto convierte a curl en el cliente HTTP de línea de comandos más popular y utilizado del mundo. 

cURL es muy versátil y representa una solución común para realizar diversas tareas, como realizar solicitudes HTTP, descargar archivos, cargar datos e interactuar con API. Ofrece varias funciones, desde la personalización de solicitudes hasta el soporte para proxies.

Instalación de curl

Aprendamos ahora cómo instalar curl en tu equipo.

macOS

No necesitas instalar curl en macOS. La herramienta ya está incluida en el sistema operativo y puedes usarla de forma nativa en la aplicación de la terminal.

Windows

A partir de Windows 10, Windows incluye una copia de curl. Al mismo tiempo, el comando curl es un alias del comando Invoke-WebRequest de PowerShell . Esto significa que los comandos curl de la terminal de Windows invocarán Invoke-Request en segundo plano. Para evitarlo y usar realmente curl de cURL, reemplaza «curl» por «curl.exe». De esta forma, PowerShell ejecutará curl y no Invoke-Request.

Por ejemplo, puedes verificar la versión actual de curl instalada en tu equipo Windows en la terminal con:

curl.exe --version

Esto debería imprimir algo similar a:

curl 8.0.1 (Windows) libcurl/8.0.1 Schannel WinIDN

Release-Date: 2023-03-20

Protocols: dict file ftp ftps http https imap imaps pop3 pop3s smtp smtps telnet tftp

Features: AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

Si eres usuario de Windows, sustituye todas las instancias de «curl» en los comandos del artículo por la cadena «curl.exe». De lo contrario, configura el subsistema de Windows para Linux (WSL) y sigue las instrucciones que aparecen a continuación.

Linux

En Linux, el procedimiento para instalar curl cambia en función de la distribución específica que estés utilizando. Las distribuciones populares de Linux, como Ubuntu y Fedora, están incluidas de forma predeterminada. Por lo tanto, puedes usar curl directamente en la terminal.

En otras distribuciones, es posible que no se incluya curl. En este caso, puedes añadirlo mediante el administrador de paquetes de distribución. En un sistema operativo basado en Debian, puedes instalar curl con el siguiente comando:

sudo apt-get install curl

Qué necesitas para usar un proxy en curl

Un proxy actúa como intermediario entre el cliente y el servidor de destino. Intercepta solicitudes del cliente, las reenvía al servidor, recibe la respuesta del servidor y se la devuelve al cliente. Este enfoque de intermediario aumenta el anonimato y ayuda a evitar las restricciones de red. Esto se debe a que el servidor de destino verá que las solicitudes provienen de la IP y la ubicación del servidor proxy elegido y no de ti.

Para empezar a usar curl con los servicios de proxy, primero necesitas acceder a un proxy. En concreto, esta es la sintaxis de una URL de proxy:

[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]

Esto consiste en:

  • <PROTOCOL>: el protocolo que se utilizará para conectarse al servidor proxy. Si no se especifica ningún protocolo, curl tendrá el valor predeterminado http://.
  • <HOST>: la dirección IP o URL del host del servidor proxy necesaria.
  • <PORT>: el número del puerto conectado al servidor proxy. Si no se especifica ningún puerto, curl usará 1080 por defecto.
  • <USERNAME>: el nombre de usuario opcional para especificar cuándo se requiere la autenticación.
  • <PASSWORD>: la contraseña opcional para especificar cuándo se requiere la autenticación.

En cuanto a los protocolos proxy, los más populares son HTTP y HTTPS, seguidos de SOCKS.

¡Es hora de recuperar un proxy HTTP válido!

Puedes obtener uno gratis en Free Proxy List, como se muestra a continuación:

IP Address: 71.19.249.97; Port: 8443

Esto significa que la URL del proxy es:

http://71.19.249.97:8443

Optar por una solución como esta es aceptable para fines de aprendizaje, pero no puedes depender de ello en situaciones del mundo real. Los servicios de proxies gratuitos son poco fiables, propensos a errores, lentos, ávidos de datos y tienen una corta duración. ¡No los utilices!

¿Cuál es la solución? Proxies prémium de Bright Data, el mejor proveedor del mercado. Suscríbete y prueba nuestros fiables proxies de forma gratuita.

Ten en cuenta que las soluciones prémium están protegidas mediante autenticación. Supongamos que el protocolo es HTTP, el host es 71.103.203.109, el puerto es 9321 y el par de credenciales es admin-32458 y rTuJ3tEwf. En este caso, la URL del proxy de curl sería:

http://admin-32458:@rTuJ3tEwf71.103.203.109:9321

Cómo especificar un proxy HTTP/HTTPS en curl

Antes de empezar, ejecuta el siguiente comando en tu terminal:

curl "https://httpbin.org/ip"

Como puedes ver, la sintaxis básica de curl es:

curl [optional_commands] <URL>

Una práctica recomendada de curl recomienda colocar las URL entre comillas dobles para evitar problemas con los caracteres especiales.

Ejecútalo y deberías obtener algo como esto:

{

  "origin": "194.33.243.7"

}

El proyecto HTTPBin te permite obtener información sobre tus solicitudes HTTP. En detalle, el punto final /ip devuelve la IP de origen de la solicitud, que es la dirección IP del equipo que realizó la solicitud. En otras palabras, devuelve tu IP. 

Tras configurar un proxy en curl, deberías ver la dirección IP del servidor proxy y no la tuya.

Hay varias maneras de configurar un proxy en curl. Veamos ahora los enfoques más populares para especificar un proxy HTTP/HTTPS en curl.

Uso de un argumento de línea de comandos

curl ofrece dos argumentos de línea de comandos para establecer una URL de proxy:

  • -x
  • --proxy

Los dos pueden usarse indistintamente, ya que hacen exactamente lo mismo. Este último es solo un alias del primero.

Por lo tanto, la sintaxis para usar curl con los servicios de proxy se convierte en:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

O:

curl --proxy [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

Nota: las opciones de la línea de comandos distinguen las mayúsculas de las minúsculas en curl. Por ejemplo, -x y -X tienen dos significados diferentes.

Si ahora ejecutas:

curl -x "http://71.19.249.97:8443" "https://httpbin.org/ip"

O el equivalente:\

curl --proxy "http://71.19.249.97:8443" "https://httpbin.org/ip"

Deberías obtener:

{

  "origin": "71.19.249.97"

}

El origen coincide con la IP del servidor proxy. Esto significa que el sitio de destino considera que la solicitud proviene del proxy, tal como se deseaba. ¡Genial!

No olvides que los proxies gratuitos tienen una vida corta, por lo que es poco probable que el servidor anterior siga activo cuando leas este artículo. En caso de error, sustitúyelo por uno nuevo.

Uso de variables de entorno

Otra forma de usar un proxy en curl es establecer las dos variables de entorno siguientes:

  • http_proxy: la URL del servidor proxy que se utilizará para acceder a las URL que incluyan el protocolo HTTP.
  • https_proxy: la URL del servidor proxy que se utilizará para acceder a las URL que incluyan el protocolo HTTPS.

En macOS y Linux, puedes configurar esos dos entornos con la siguiente sintaxis:

export http_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

export https_proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Por lo tanto, los dos comandos se convertirán en:

export http_proxy="http://71.19.249.97:8443"

export https_proxy="http://71.19.249.97:8443"

En Windows, debes usar esta sintaxis de PowerShell:

$env:http_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

$env:https_proxy = "[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Entonces, en nuestro ejemplo:

$env:http_proxy = "http://71.19.249.97:8443"

$env:https_proxy = "http://71.19.249.97:8443"

De ahora en adelante, cada comando de curl pasará por los proxies especificados sin tener que añadir la opción -x.

De nuevo, esto devolverá:

curl https://httpbin.org/ip

{

  "origin": "71.19.249.97"

}

Para desactivar los proxies de curl, desactiva las variables de entorno con:

unset http_proxy

unset https_proxy

O en Windows:

$env:http_proxy = ""

$env:https_proxy = ""

curl volverá a su comportamiento estándar y https://httpbin.org/ip ahora devolverá tu IP.

Uso de un archivo de configuración

Puedes especificar globalmente un proxy para curl creando un archivo de configuración .curlrc.

En Linux y macOS, abre la terminal y entra en tu directorio principal:

cd ~

Después, accede al .curlrc con nano:

nano .curlrc

Si el archivo ya existe, se abrirá. De lo contrario, se creará primero y, a continuación, se abrirá.

Añade la siguiente línea al archivo .curlrc:

proxy="http://71.19.249.97:8443"

La sintaxis de esta instrucción es:

proxy="[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]"

Guarda el archivo, cierra el terminal y vuelve a iniciarlo. 

En Windows, debes crear un archivo _curlrc dentro del directorio %APPDATA% con el mismo contenido. Pega %APPDATA% en la barra de direcciones del explorador de archivos y pulsa ENTER para acceder al directorio. 

Esto debería llevarte a C:\Usuarios\\AppData\Roaming.

Ahora, curl utilizará automáticamente el proxy especificado en el archivo de configuración:

curl "http://httpbin.org/ip"

Obtendrás:

{

  "origin": "71.19.249.97"

}

¡Fantástico! ¡Acabas de aprender a usar curl con servidores proxy de tres maneras diferentes!

Cómo configurar los proxies SOCKS en curl

Si quieres usar un proxy SOCKS, la estructura de comandos sigue siendo la misma:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] <URL>

La principal diferencia es que <PROTOCOL> será socks4, socks4a, socks5 o socks5h en lugar de http y https.

Un ejemplo completo de un proxy SOCKS curl en acción es:

curl -x "socks5://94.14.109.54:2478" "http://httpbin.org/ip"

Como es de esperar, el resultado será:

{

  "origin": "94.14.109.54"

}

Un enfoque alternativo incluye las opciones de línea de comandos --socks4, --socks4a y --socks5 en lugar de -x. En este caso, debes establecer la URL del proxy sin nombre de usuario y contraseña después de la opción y, a continuación, las credenciales después de --proxy-user:

curl --socks4|--socks4a|--socks5 <HOST>[:<PORT>] <URL> --proxy-user <USERNAME>:<PASSWORD>

Por ejemplo:

curl --socks4 "93.16.238.41:8721" "http://httpbin.org/ip" --proxy-user admin334:kv4NsDgc3

Se conectará a HTTPBin a través del proxy 93.16.238.41:8721 socks4, utilizando admin334 como nombre de usuario y kv4nsDGC3 como contraseña para la autenticación.

Consejos y trucos que debes saber

En esta sección, verás algunos trucos interesantes y consejos valiosos para usar un proxy curl como un profesional.

Activación y desactivación rápida de los proxies

La idea aquí es definir alias para configurar y desconfigurar proxies mediante programación a través de variables de entorno con comandos personalizados. 

En macOS y Linux, puedes hacerlo creando un archivo .bashrc. Se trata de un archivo de secuencia de comandos que se ejecuta cada vez que el usuario inicia sesión.

Muévelo a tu carpeta de inicio:

cd ~

Después, crea o abre un archivo .bashrc:

nano .bashrc

Añade el contenido en el formato siguiente al archivo:

alias proxyon="export http_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]';export https_proxy='[<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>]'"
alias proxyoff="unset http_proxy;unset https_proxy"

Por lo tanto, en nuestro ejemplo sería:

alias proxyon="export http_proxy='http://71.19.249.97:8443';export https_proxy='http://71.19.249.97:8443'"

alias proxyoff="unset http_proxy;unset https_proxy"

Guarda el archivo y reinicia tu equipo.

Ahora puedes activar y desactivar un proxy curl con:

proxyon

curl "http://httpbin.org/ip"

# other HTTP requests...

proxyoff

Ten en cuenta los comandos personalizados proxyon y proxyoff. Estos comandos realizan las operaciones especificadas por los alias del archivo .bashrc.

En Windows, puedes lograr algo similar con los alias de PowerShell.

Ignorar los proxies para una sola solicitud

Si quieres evitar que curl utilice un proxy configurado para una solicitud específica, puedes usar el argumento --noproxy «*” de la siguiente manera:

curl --noproxy "*" <URL>

Esto indica a curl que no utilice proxies para todas las URL.

Configura un proxy y ejecuta:

curl --noproxy "*" "https://httpbin.org/ip"

El origen resultante contendrá tu IP, no la del servidor proxy.

Evitar errores en el certificado SSL

Al usar proxies en curl, es posible que tus solicitudes fallen debido a errores en un certificado SSL. Para evitarlo, usa la opción -k como en la siguiente sintaxis:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -k <URL>

-k te ayuda a evitar errores de certificación al permitir conexiones de servidor inseguras en lugar de SSL.

Por ejemplo, puedes contactar con HTTPBin evitando los problemas de SSL con:

curl -x "http://71.19.249.97:8443" -k "https://httpbin.org/ip"

Obtener más información sobre la solicitud

Cuando una solicitud en curl falla, no es fácil entender lo que ha ocurrido. Para diagnosticar el error y ver todas las operaciones realizadas por curl, configura la opción -v:

curl -x [<PROTOCOL>://][<USERNAME>:<PASSWORD>]@<HOST>[:<PORT>] -v <URL>

Esto mostrará los detalles sobre las conexiones establecidas y los encabezados utilizados por la herramienta:

$curl -x "http://71.19.249.97:8443" -v "https://httpbin.org/ip"

*   Trying 71.19.249.97:8443...

* Connected to 71.19.249.97 (71.19.249.97) port 8443 (#0)

* allocate connect buffer

* Establish HTTP proxy tunnel to httpbin.org:443

> CONNECT httpbin.org:443 HTTP/1.1

> Host: httpbin.org:443

> User-Agent: curl/8.0.1

> Proxy-Connection: Keep-Alive

>

< HTTP/1.0 200 OK

<

* CONNECT phase completed

* CONNECT tunnel established, response 200

* schannel: disabled automatic use of client certificate

* ALPN: offers http/1.1

* ALPN: server accepted http/1.1

* using HTTP/1.1

> GET /ip HTTP/1.1

> Host: httpbin.org

> User-Agent: curl/8.0.1

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Sat, 26 Aug 2023 10:39:13 GMT

< Content-Type: application/json

< Content-Length: 31

< Connection: keep-alive

< Server: gunicorn/19.9.0

< Access-Control-Allow-Origin: *

< Access-Control-Allow-Credentials: true

<

{

  "origin": "71.19.249.97"

}

* Connection #0 to host 71.19.249.97 left intact

¿Qué proxies son los mejores para curl?

La respuesta a esta pregunta depende de tu caso de uso y de la naturaleza de las solicitudes de curl que tengas que realizar. Para encontrar la solución de proxy adecuada para tus necesidades, echa un vistazo a los diferentes tipos de proxies disponibles:

  • Proxies de centros de datos: son rápidos, pero los sitios pueden detectarlos y bloquearlos fácilmente debido a sus rangos de IP identificables.
  • Proxies residenciales: garantizan un alto nivel de anonimato porque ofrecen direcciones IP que provienen de dispositivos reales en ubicaciones específicas. Los proxies residenciales son perfectos para acceder a sitios que dependen de bloqueos de restricción geográfica o para evitar las medidas antibots, además de para realizar raspado web con curl.
  • Proxies de ISP: son seguros, rápidos y muy fiables, ya que proporcionan direcciones IP desde dispositivos registrados en los proveedores de Internet (ISP). Los proxies de ISP representan una solución perfecta para la supervisión de optimización para buscadores (SEO), la navegación web y la investigación del mercado.
  • Proxies móviles: ofrecen direcciones IP de dispositivos móviles reales para un alto nivel de anonimato. Son útiles para acceder a aplicaciones, sitios o contenido diseñados específicamente para dispositivos móviles.

Este es solo un breve resumen, pero puedes obtener más información en nuestra guía sobre tipos de IP de proxies.

Conclusión

En esta guía de proxies de curl, aprendiste qué es cURL, qué ofrece y cómo configurar un proxy HTTP/HTTPS/SOCKS. Resulta que no te puedes fiar de curl con los servicios de proxies de proveedores gratuitos. Por lo tanto, la principal decisión técnica que hay que tomar es elegir el proveedor de proxies. Ahorra tiempo y energía y opta por la mejor opción del mercado: Bright Data.

Bright Data controla los mejores servidores proxy del mundo y trabaja para empresas de Fortune 500 y para más de 20 000 clientes. Su red mundial de proxies incluye:

En general, es una de las redes de proxies orientadas al raspado web más grandes y fiables del mercado. Únete a la mayor red de proxies y obtén una prueba gratuita.