Cómo descargar archivos con cURL

Aprenda a descargar archivos de manera eficiente con cURL, desde la sintaxis básica hasta las opciones avanzadas, además de una breve comparación entre cURL y Wget.
14 min read
How to download files with curl blog image

En esta guía, verá:

  • La sintaxis básica del archivo de descarga de cURL
  • Cómo gestionar situaciones más complejas al descargar archivos con cURL
  • Cómo descargar varios archivos a la vez
  • Algunas prácticas recomendadas para usar cURL de forma eficaz
  • Una comparación rápida entre cURL y Wget

¡Vamos allá!

Sintaxis básica del archivo de descarga de cURL

Esta es la sintaxis más básica para descargar un archivo con cURL:

curl -O <file_url>

Nota: en Windows, sustituya curl por curl.exe. Esto es necesario porque curl es un alias de Invoke-WebRequest en Windows PowerShell, mientras que curl.exe ejecuta explícitamente la herramienta de línea de comandos cURL.

La opción -O indica a cURL que guarde el archivo descargado con su nombre original tomado de la URL especificada en . De manera equivalente, puede usar --remote-name:

curl --remote-name <file_url>

Por ejemplo, considere el siguiente comando cURL del archivo de descarga:

curl -O "https://i.imgur.com/CSRiAeN.jpg"

Esto generará un resultado con una barra de progreso de descarga como la siguiente:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   155k      0 --:--:-- --:--:-- --:--:--  158k

Cuando el progreso alcance el 100 %, aparecerá un archivo llamado CSRiAeN.jpg en la carpeta donde ejecutó el comando cURL:

El archivo CSRiAeN.jpg descargado se guarda en la carpeta donde se ejecutó cURL

Para obtener más información sobre qué es cURL y qué opciones ofrece, lea nuestra guía de cURL. ¡Es hora de explorar escenarios más complejos!

Uso de cURL para descargar un archivo: Opciones avanzadas

Ahora que conoce la sintaxis básica del archivo de descarga de cURL, está listo para aprender a personalizar el comando con opciones adicionales.

Cambiar el nombre del archivo descargado

De forma predeterminada, la opción -O descarga el archivo especificado en la URL de destino con su nombre original. Si el archivo remoto especificado en la URL no incluye un nombre, cURL crea un archivo sin extensión llamado curl_response:

El archivo curl_response predeterminado de la carpeta donde se ejecutó cURL

cURL también mostrará una advertencia para informarle sobre ese comportamiento:

Warning: No remote file name, uses "curl_response"

Para especificar un nombre personalizado para el archivo descargado, use la opción -o (o --output) como se muestra aquí:

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg"

Este comando indica a cURL que realice una solicitud GET a la URL del archivo especificada. A continuación, guarda el contenido descargado con el nombre especificado después de -o en lugar de mostrarlo en la salida estándar.

Esta vez, el archivo de salida será un archivo logo.jpg :

El archivo logo.jpg descargado en la carpeta donde se ejecutó cURL

Siga los redireccionamientos

Algunas URL no apuntan directamente al archivo deseado y requieren redireccionamientos automáticos para llegar al destino final.

Para indicar a cURL que siga las redirecciones, debe usar la opción -L :

curl -O -L "<file_url>"

Sin el indicador -L , cURL generaría los encabezados de respuesta de redirección (como 301 Moved Permanently o 302 Found). Específicamente, no seguiría automáticamente la nueva ubicación proporcionada en el encabezado Ubicación .

Autenticarse en el servidor

Algunos servidores restringen el acceso a sus recursos y requieren la autenticación del usuario. Para realizar la autenticación HTTP o FTP básica, puede usar la opción -u (o --user). Esto le permite especificar un nombre de usuario y una contraseña en el siguiente formato:

<username>:<password>

El nombre de usuario y la contraseña están separados por dos puntos (:), lo que hace imposible incluir dos puntos en el nombre de usuario. En su lugar, la contraseña puede contener dos puntos.

La  cadena <contraseña>  es opcional. Si solo especifica el nombre de usuario, cURL le pedirá que escriba la contraseña.

Esta es la sintaxis para descargar un archivo con cURL mediante la autenticación del servidor:

curl -O -u <username>:<password> <file_url>

Por ejemplo, puede descargar un archivo .png desde una URL con autenticación mediante este comando:

curl -O -u "myUser:myPassword" "https://example.com/secret.txt"

cURL se autenticará en el servidor utilizando myUser y myPassword como credenciales. A continuación, descargará el archivo secret.txt .

Imponer restricciones de ancho de banda

De forma predeterminada, cURL descarga un archivo utilizando todo el ancho de banda disponible, lo que no siempre es conveniente. Para controlar la velocidad de descarga, puede usar la opción --limit-rate seguida de la velocidad máxima de descarga que desea establecer:

curl -O --limit-rate 5k "https://i.imgur.com/CSRiAeN.jpg"

La salida será algo así como:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   5166      0  0:00:06  0:00:06 --:--:--  5198

Tenga en cuenta que la velocidad de descarga (5198 bytes por segundo, lo que corresponde a 5 KB por segundo) coincide con la especificada en la opción. Esto ocurre incluso cuando la velocidad de descarga normal de la máquina es superior al valor establecido con --limit-rate.

--limit-rate es útil para controlar el uso del ancho de banda y evitar sobrecargar la red, cumplir con las restricciones de ancho de banda o simular condiciones de red más lentas con fines de prueba.

Descargar a través de un servidor proxy

Cuando realiza una solicitud de descarga con cURL, su dirección IP queda expuesta al servidor de destino. Esto supone un problema si quiere mantener la privacidad o evitar medidas antibots, como la limitación de velocidad.

Para enmascarar su IP y enviar su solicitud a través de un proxy, use la opción -x (o --proxy) en su comando cURL:

curl -x <proxy_url> -O <file_url>

<proxy_url>> debe especificarse en el siguiente formato:

[protocol://]host[:port]

Tenga en cuenta que la URL del proxy variará en función de si utiliza un proxy HTTP, HTTPS o SOCKS. Para obtener instrucciones más detalladas, consulte nuestra guía de integración de proxy cURL .

Por ejemplo, si usa un proxy HTTP, el comando sería:

curl -x "http://proxy.example.com:8080" -O "https://i.imgur.com/CSRiAeN.jpg"

Realizar descargas en segundo plano

Por defecto, el comando de descarga de archivos con cURL muestra una barra de progreso o un mensaje de error en caso de fallo. Para desactivar estas salidas, puede activar el modo «silencioso» o «en silencio» mediante la opción -s (o --silent):

curl -O -s "https://i.imgur.com/CSRiAeN.jpg"

Esto hará que cURL funcione silenciosamente. Si la descarga se realiza correctamente, el archivo aparecerá en el directorio actual, pero no habrá comentarios en la terminal.

Imprimir información detallada

En caso de error o para entender mejor lo que hace cURL entre bastidores, se recomienda habilitar el modo detallado con la opción -v (o --verbose):

curl -O -v "https://i.imgur.com/CSRiAeN.jpg"

Cuando ejecute el comando, verá un resultado adicional que proporciona información detallada sobre el proceso de solicitud y respuesta:

* IPv6: (none)
* IPv4: 146.75.52.193
*   Trying 146.75.52.193:443...
* schannel: disabled automatic use of client certificate
* ALPN: curl offers http/1.1
* ALPN: server accepted http/1.1
* Connected to i.imgur.com (146.75.52.193) port 443
* using HTTP/1.x
> GET /CSRiAeN.jpg HTTP/1.1
> Host: i.imgur.com
> User-Agent: curl/8.10.1
> Accept: */*
>
* Request completely sent off
* schannel: failed to decrypt data, need more data
< HTTP/1.1 200 OK
< Connection: keep-alive
< Content-Length: 35354
< Content-Type: image/jpeg
< Last-Modified: Wed, 08 Jan 2025 08:02:49 GMT
< ETag: "117b93e0521ba1313429bad28b3befc8"
< x-amz-server-side-encryption: AES256
< X-Amz-Cf-Pop: IAD89-P1
< X-Amz-Cf-Id: wTQ20stgw0Ffl1BRmhRhFqpCXY_2hnBLbPXn9D8LgPwdjL96xarRVQ==
< cache-control: public, max-age=31536000
< Accept-Ranges: bytes
< Age: 2903
< Date: Wed, 08 Jan 2025 08:51:12 GMT
< X-Served-By: cache-iad-kiad7000028-IAD, cache-lin1730072-LIN
< X-Cache: Miss from cloudfront, HIT, HIT
< X-Cache-Hits: 1, 0
< X-Timer: S1736326272.410959,VS0,VE1
< Strict-Transport-Security: max-age=300
< Access-Control-Allow-Methods: GET, OPTIONS
< Access-Control-Allow-Origin: *
< Server: cat factory 1.0
< X-Content-Type-Options: nosniff
<
{ [1371 bytes data]
100 35354  100 35354    0     0   212k      0 --:--:-- --:--:-- --:--:--  214k
* Connection #0 to host i.imgur.com left intact

Esto incluye detalles de conexión, encabezados de solicitud, encabezados de respuesta e información adicional sobre el progreso de la descarga.

Establecer una barra de progreso simplificada

Es posible que la barra de progreso estándar de los archivos de descarga de cURL no se adapte a sus necesidades. Puede habilitar una barra de progreso más sencilla con la opción -# (o --progress-bar):

curl -O -# "https://i.imgur.com/CSRiAeN.jpg"

Aparecerá una barra de progreso con el carácter # , que se irá llenando gradualmente a medida que se descargue el archivo:

########################################################### 100.0%

La barra # ofrece una vista más minimalista del progreso de la descarga en comparación con la salida de progreso de cURL predeterminada.

Cómo descargar varios archivos con cURL

Acaba de ver cómo descargar un archivo con cURL, pero ¿qué pasa con la descarga de varios archivos con un solo comando? ¡Prepárese para aprender eso!

Descarga del archivo Range

cURL admite la descarga de varios archivos a la vez mediante la expansión de URL. En detalle, puede descargar varios archivos con la misma URL remota especificándolos entre corchetes {}:

curl -O "https://example.com/images/{1.jpg,2.jpg,3.jpg}"

Esto descargará los tres archivos especificados:

1.jpg
2.jpg
3.jpg

Observe cómo los archivos especificados en el {} pueden tener diferentes extensiones.

De manera equivalente, puede usar la sintaxis entre corchetes [] :

curl -O "https://example.com/files/file[1-3].jpg"

Se obtendrá el mismo resultado que en el primer ejemplo. En este caso, todos los archivos de [] deben compartir la misma extensión.

Nota: Si incluye opciones personalizadas (como -s para el modo silencioso o --limit-rate para las restricciones de ancho de banda), se aplicarán a todos los archivos que se estén descargando.

Descarga de varios archivos

Para descargar archivos desde diferentes URL, debe especificar la opción -O varias veces:

curl -O "https://i.imgur.com/CSRiAeN.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"

Este comando descargará CSRiAeN.jpg de i.imgur.com y upload_blog_20201220_153903.jpg de brightdata.com.

La salida contendrá una barra de descarga por cada URL dada:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 35354  100 35354    0     0   271k      0 --:--:-- --:--:-- --:--:--  276k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 22467    0 22467    0     0  34657      0 --:--:-- --:--:-- --:--:-- 34724

Del mismo modo, puede usar varias opciones de -o :

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg" -o "blog_post.svg"

El comando anterior descargará CSRiAeN.jpg y lo guardará como logo.jpg, descargará upload_blog_20201220_153903.svg y lo guardará como blog_post.svg.

Tenga en cuenta que también puede combinar las opciones -O y -o :

curl "https://i.imgur.com/CSRiAeN.jpg" -o "logo.jpg" -O "https://brightdata.com/wp-content/uploads/2020/12/upload_blog_20201220_153903.svg"

Esto descarga logo.jpg como antes y upload_blog_20201220_153903.svg con su nombre de archivo original.

Tenga en cuenta que otras opciones como -v-s o --limit-rate se aplican a todas las URL de forma distintiva, por lo que deben especificarse una vez.

Mejores prácticas al descargar archivos con cURL

A continuación se muestra una lista de algunas de las mejores prácticas más importantes para la descarga de archivos cURL:

  • Utilice curl.exe en lugar de curl en Windows: en Windows, utilice curl.exe en lugar de curl para evitar conflictos con el cmdlet Invoke-WebRequest .
  • Ignore los errores de HTTPS y SSL/TLS (con precaución): utilice la opción -k (o --insecure) para ignorar los errores de validación del certificado SSL/TLS. Al mismo tiempo, tenga en cuenta que esto compromete la seguridad y solo debe usarse en entornos confiables.
  • Especifique los métodos HTTP correctos: Al realizar solicitudes, utilice el método HTTP adecuado, como GET, POST o PUT. El método afecta a la forma en que el servidor responde a su solicitud. Utilice la opción -X para especificar el método.
  • Escriba las URL entre comillas y evite los caracteres especiales: escriba siempre las URL entre comillas simples o dobles para tratar los caracteres especiales correctamente. Use caracteres de escape (\) para evitar problemas con los espacios, los signos y otros caracteres especiales en las URL.
  • Especifique un proxy para proteger su identidad: use la opción -x (o --proxy) para enviar sus solicitudes de cURL a través de un proxy. Esto ayuda a proteger su dirección IP y a mantener la privacidad al extraer o descargar archivos.
  • Guardar y reutilizar cookies en diferentes solicitudes: utilice las opciones -c y -b para guardar y reutilizar las cookies en solicitudes posteriores. Esto ayuda a mantener la persistencia de la sesión y puede ser útil para la autenticación o el seguimiento.
  • Limite la velocidad de descarga para un mejor control: utilice la opción --limit-rate para controlar la velocidad de descarga y evitar sobrecargar la conexión de red o activar límites de velocidad en el servidor.
  • Agregue una salida detallada para la depuración: habilite el modo detallado con la opción -v para obtener información detallada sobre la solicitud y la respuesta. Esto puede resultar útil para la depuración y la solución de problemas.
  • Compruebe si hay respuestas de error: compruebe siempre los códigos de respuesta HTTP con la opción -w para comprobar si la descarga del archivo se ha realizado correctamente (p. ej., 200 OK) o si ha habido un error (p. ej., 404 Not Found).

cURL y Wget para descargar archivos

cURL y Wget son herramientas de línea de comandos para recuperar archivos de servidores remotos. La diferencia principal entre ambas es la siguiente:

  • Wget está diseñado para descargar archivos de la Web. Es compatible con HTTP, HTTPS, FTP y muchos otros protocolos. Wget es conocido por su capacidad para descargar archivos de forma recursiva, reanudar descargas interrumpidas y funcionar bien en procesos en segundo plano. Consultecómo usarlo para descargar páginas web con Python.
  • cURL es una herramienta de línea de comandos versátil que se utiliza para transferir datos hacia y desde un servidor mediante varios protocolos de Internet. Se usa comúnmente para probar puntos finales, realizar solicitudes HTTP simples y descargar archivos individuales. cURL también se puede usar para extracción de datos web.

La principal diferencia entre cURL y Wget es que cURL ofrece un control más granular sobre la transferencia de datos En detalle, admite encabezados personalizados, autenticación y más protocolos. Por el contrario, Wget es más simple y más adecuado para descargas masivas, recursión y gestión de transferencias interrumpidas.

Conclusión

En esta guía, ha aprendido cómo descargar archivos con cURL. Comenzó con la sintaxis básica para descargar archivos con cURL y exploró escenarios y casos de uso más complejos. Ahora sabe cómo extraer uno o varios archivos con cURL.

Tenga en cuenta que cada vez que hace una solicitud HTTP, deja rastros en Internet. Para proteger su identidad y privacidad y mejorar su seguridad, debería considerar la posibilidad de integrar un proxy con cURL. Por suerte, ¡Bright Data tiene todo lo que necesita!

Bright Data se encarga de gestionar los mejores servidores proxy del mundo y presta servicio a empresas de Fortune 500 y a más de 20 000 clientes. Su red mundial de proxis incluye:

En general, es una de las redes de proxis orientadas a la extracción web más grandes y fiables del mercado.

¡Regístrese ahora y pruebe nuestros proxis y soluciones de extracción web de forma gratuita!

No se requiere tarjeta de crédito