Cómo usar cURL con proxy: comandos y ejemplos

Publicado:

4 min de lectura

PXNET
Autor: PXNET
Cómo usar cURL con proxy

Qué es cURL

cURL (se pronuncia «kerl») es una herramienta de línea de comandos para transferir datos hacia y desde servidores. Con unas pocas líneas en el terminal mueves grandes volúmenes de datos de un servidor a otro.

Como todo comando, cURL sigue una sintaxis fija:

curl [opciones] [URL]

La parte de «opciones» indica qué debe hacer el comando. De estos parámetros —también llamados flags— hay unos 380. Uno de los más conocidos es -o, que guarda el contenido de una página en un archivo.

Como origen o destino, cURL necesita una URL (Uniform Resource Locator), una forma concreta de identificador uniforme de recursos. Los protocolos de red que no se direccionan mediante URL no son compatibles con cURL.

Por dentro, cURL se apoya en la biblioteca libcurl, que aporta los protocolos admitidos. libcurl es portable y se comporta igual en Linux, Windows y macOS; en esos sistemas suele venir preinstalada. Si no está, puedes descargar el paquete desde el sitio de cURL.

Qué protocolos admite cURL

cURL admite protocolos que transfieren datos en ambos sentidos y se direccionan por URL. HTTP es el valor por defecto; además funciona, entre otros, con:

  • DICT
  • FILE
  • FTP y FTPS
  • GOPHER y GOPHERS
  • IMAP e IMAPS
  • LDAP y LDAPS
  • MQTT
  • POP3 y POP3S
  • RTMP y RTSP
  • SCP y SFTP
  • SMB y SMBS
  • SMTP y SMTPS
  • TELNET
  • TFTP

Por qué se usa cURL

cURL es popular porque es versátil, simple y fiable. Descarga páginas enteras y transfiere archivos en cualquier formato admitido, y además sabe autenticar usuarios, enviar HTTP POST, trabajar con Metalink, subir por FTP y usar proxy en conexiones SSL. A eso se suma:

  • una salida detallada de lo que se envía y se recibe, muy útil para depurar
  • compatibilidad con muchos protocolos de red
  • la opción de indicar varias variantes de una URL en un solo comando usando llaves
  • el mismo comportamiento en todos los sistemas operativos habituales

cURL con un proxy HTTP o HTTPS

Para probarlo va bien un servicio que devuelva la IP de origen de la petición: si el proxy funciona, ahí verás su dirección y no la tuya.

Los comandos

Abre un terminal y consulta las opciones:

bash
curl --help

En la lista aparece, entre otras:

-x, --proxy [protocol://]host[:port]

La x va en minúscula. Los datos del proxy se pasan con -x o con --proxy; las dos formas significan lo mismo:

bash
curl -x "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

o bien

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

Si aparecen errores de certificado SSL, añade -k en minúscula. Con eso cURL acepta conexiones no verificadas:

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip" -k

La URL del proxy y la de destino van entre comillas dobles. No es casualidad: es la forma recomendada para que los caracteres especiales de la URL no confundan al intérprete de comandos.

El protocolo de proxy por defecto es HTTP, así que estos dos comandos hacen exactamente lo mismo:

bash
curl --proxy "http://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"
curl --proxy "user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

cURL con un proxy SOCKS

bash
curl -x "socks5://user:pwd@127.0.0.1:1234" "http://httpbin.org/ip"

Según la versión de SOCKS escribirás socks4://, socks4a://, socks5:// o socks5h://. Con socks5h:// el nombre de host lo resuelve el proxy y no tu equipo, que suele ser la opción recomendable para scraping: de lo contrario la consulta DNS sale por tu propia conexión.

Como alternativa, puedes fijar el proxy con --socks5 en lugar de -x; el usuario y la contraseña van entonces en --proxy-user.

cURL es una herramienta muy potente para automatizar y, en cuanto a soporte de proxy, una de las líneas de comandos más completas que existen. Como libcurl además se lleva bien con PHP, muchas aplicaciones web la usan en proyectos de scraping, lo que convierte a cURL en parte del equipamiento básico de cualquier scraper. Las direcciones que elijas deciden la tasa de éxito: Proxies residenciales para destinos exigentes y Proxies de centro de datos para descargas masivas y rápidas.