Aprender cURL [parte 1/2]

curl

Es bien conocido que UNIX siempre a recomendado utilizar gwet para descargar archivos directamente desde la línea de comandos. Ideal para los Shell Scripts, wget fue genial en aquellos tiempos en los que no teníamos fácil acceso a un navegador Web. Por ejemplo, si tratamos de instalar una nueva aplicación en un servidor remoto, wget puede ser la solución.

Si eres de los que siguen usando wget, entonces te encantará cURL. Al igual que wget, cURL puede descargar archivos, pero también puede publicar datos en un formulario de una página Web, subir un archivo a través de File Transfer Protocol (FTP), actuar como proxy, configurar las cabeceras HTTP, e infinidad de cosas. Con lo que podemos concluir que tiene muchas aplicaciones potenciales.

Vamos a instalar cURL, así, desde nuestro terminal:

$ wget http://curl.haxx.se/download/curl-7.14.0.tar.gz
$ tar xzf curl-7.14.0.tar.gz
$ cd curl-7.14.0
$ ./configure && make && sudo make install

Podemos ver todas las descargas disponibles para otras plataformas (también para sistemas Windows) así como paquetes para ciertas distribuciones desde curl.haxx.se/download/

cURL tiene tantas opciones que lo mejor es leer su manual tendidamente. Estos que os muestro son algunos de los usos comunes de cURL:

Para descargar un archivo:

$ curl -o archivoDescargado.png http://www.linuxhispano.net/wp-content/themes/constructor/images/rsslh.png

A diferencia de wget, cURL retorna el contenido descargado a la salida estádar, con lo que usaremos la opción -o para guardar la descarga realizada.

Para descargar una serie de archivos, podemos proporcionar una secuencia, un conjunto o ambos. Una secuencia es una serie de números entre corchetes ([]); un conjunto es una lista delimitada por comas entre llaves ({}). Por ejemplo, el siguiente comando nos descargará todos los archivos llamados parta.html, partb.html y partc.html desde los directorio llamados archive1996/vol1 hasta archive1999/vol4, ambos inclusive, con un total de 48 archivos. Así, usando cURL:

$ curl http://www.linuxhispano.net/archive[1996-1999]/vol[1-4]/part{a,b,c}.html \
-o “archive#1_vol#2_part#3.html”

Cuando se especifica una secuencia o serie, podemos proporcionar la opción -o con una plantilla (template), donde #1 se sustituirá por el valor actual de la primera secuencia o serie, #2 es un marcador de posición para la segunda, y así sucesivamente. Como alternativa, también podemos proporcionar -o para mantener el nombre del archivo original (mantenerlo intacto)

Para cargar un conjunto de imágenes a un servidor, usaremos la opción -T:

$ curl -T “img[1-1000].png” ftp://ftp.linuxhispano.net/upload/

En el caso anterior hemos capturado img[1-1000].png entre comlillas para evitar que la shell interprete el patrón. Con este comando hemos conseguido cargar en nuestro servidor desde la imagen 1 a la 1000.

Estos son algunos de los ejemplos que podemos hacer, pronto os mostraré alguno más. Es importante conocerlos si deseamos automatizar cualquier tipo de acceso a la Web. ¿Le has dado alguna otra utilidad? ¿Lo usas actualmente?

Continuación: parte-2.

17 Comentarios:

  1. javier parra dice:

    no consigo hacerlo funcionar.

    instalarlo lo he instalado

    lo que quiero hacer es que me descargue unos videos con extension .ogv desde una web le pongo

    curl http://www.laweb.com/carpeta/0-200/0/video001-120.ogv

    ya que cambia el directorio despues de la carpeta (que lleva un numero aleatorio entre 0 y 200) y va cambiando tambien el numero del vedeo desde el 001 hasta el 120.

    no me descarga nada.

    tambien he probado como curl http://www.laweb.com/carpeta/0-200/0/video001-120.ogv | -o “archivo#1_video#2.ogv”

    y nada

    a que es debido?

    con wget cuando he probado para realizar el script he tenido que usar la opcion de norobots

    alguna solucion?

    gracias

    P.D lo lei el dia que lo pusiste pero no lo he podido probar hasta hoy salu2

  2. ahornero dice:

    @javier parra, me ha gustado mucho que nos comentes tu problema al usarlo. Lo que ocurre es que para que recoja un rango de números has de especificarlo entre corchetes, es decir, la invocación quedaría así:

    curl http://www.laweb.com/carpeta/0-200/0/video001-120.ogv

    Si así no funcionara deberás de hacerlo en tres partes, una por cada dígito, del 0-9 del 10-99 y del 100-120, anteponiendo a los dos primeros los ceros necesarios para completar la secuencia. Así:

    curl http://www.laweb.com/carpeta/0-200/0/video001-9.ogv
    curl http://www.laweb.com/carpeta/0-200/0/video010-99.ogv
    curl http://www.laweb.com/carpeta/0-200/0/video100-120.ogv

    Ya nos contarás como te ha ido.

  3. javier parra dice:

    no son partes, son archivos completos

    los archivos se llaman video001.ogv, video002.ov …, video010.ogv, video011.ogv, … video100.ogv, video101ogv …

    y se encuentra cada uno en un diretorio distinto, pongamos el video001 se encuentra en la ruta /0/0/video001.ogv, el video002 en la ruta /3/0/video002.ogv el video020 en la ruta /32/0/video020.ogv.

    no se si me he explicado correctamente, si yo pongo con el curl por separado los videos si lo hace bien pero quiero que me los descargue todos juntos xDD al hacer esto si va bien:

    curl http://www.laweb.com/carpeta/0/0/video001.ogv
    curl http://www.laweb.com/carpeta/3/0/video002.ogv
    curl http://www.laweb.com/carpeta/32/0/video0020.ogv

    pero lo que quiero es automatizarlo

    gracias

    salu2

  4. javier parra dice:

    me acabo de dar cuenta que en mi primer mensaje no aparecen los corchetes en los rangos [] pero cuando puse los comandos en la terminal si los puse

    salu2

  5. Pingback: Linux Hispano | Navega por Internet, conquista la Web con cURL [parte 2/2]

  6. ahornero dice:

    Parece que el sistema de comentarios no se traga los corchetes, prueba con lo que te planteé antes y sustituye los paréntesis por corchetes:

    curl http://www.laweb.com/carpeta/0-200/0/video00(1-9).ogv
    curl http://www.laweb.com/carpeta/0-200/0/video0(10-99).ogv
    curl http://www.laweb.com/carpeta/0-200/0/video(100-120).ogv

    Ya nos cuentas, a ver si ya te funciona.

  7. javier parra dice:

    los parentesis no los admite.

    y hoy con curl al poner curl http://www.laweb.com/carpeta/0/0/video001.ogv no funciona, no se que hacer xDD sin embargo con wget al poner wget http://www.laweb.com/carpeta/0/0/video001.ogv

    sin funciona

    salu2

  8. tornillo dice:

    el envio de comentarios no quita los corchetes

  9. javier parra dice:

    @tornillo, tu metodo tampoco funciona

    salu2

  10. ahornero dice:

    @tornillo: Buen aporte, está claro que si quieres decargarlo (no temporalmente) has de indicarlo esplicitamente con la opción -O.

    @javier parra: Lo que te he comentado antes funciona perfectamente, sólo haz de sustituir los paréntesis por corchetes (estos no aparecen en los comentarios) y agregar la opción -O a cada una de las llamadas.

  11. javier parra dice:

    me sigue sin funcionar me sale esto cada vez

    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    0 0 0 0 0 0 0 0 –:–:– –:–:– –:–:– 0

  12. tornillo dice:

    curl por defecto muestra en pantalla la entrada, stdin
    la opción -O escribe en disco los ficheros con el mismo nombre que los remotos. (stdout a disco)

    Ejemplo para bajar los ficheros 1 al 10
    curl http://dominio/fichero/*1-10*.jpg -O

    *=corchete

    un saludo

  13. tornillo dice:

    javier puede ser que el servidor no permita acceder a los ficheros directamente.
    prueba con otros servidores.

    pd:hay un error en mi comentario anterior:

    Ejemplo para bajar los ficheros 1 al 10
    curl http://dominio/fichero*1-10*.jpg -O

  14. javier parra dice:

    el programita curl es muy cachondo he probado en la misma web a descargar .jpg y si me deja, pero me da error en los ogv

    la url de las imagenes es http://www.laweb.com/images/imagen001.jpg

    la unica diferencia que veo es que en la url de los videos hay numeros y en la de la imagenes no

    puede ser por eso? como se podria solventar?

    gracias

    salu2

  15. javier parra dice:

    desde el navegador si puedo acceder a esos ficheros y con el wget tambien pero 1 por 1 y con el curl ni siquiera 1 por 1

    salu2

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

*

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>