Wget es la herramienta -de línea de comandos- más popular para descargar contenido desde un servidor HTTP, HTTPS y/ó FTP. Cuando utilizamos Wget, envía una serie de datos en la cabecera de los paquetes TCP al servidor que podemos cambiar a nuestro gusto y según nuestras necesidades. Existe versiones tanto para Windows, GNU/Linux y MAC Os.
Si quieres aprender como hacerlo, no lo dudes y sigue leyendo este sencillo tutorial, ¡te gustará!
⬇️ Compra en Amazon el hardware que utilizo ⬇️
- 💻 Ordenador Portátil: Descúbrelo aquí
- 🖥️🖥️ Monitores: Mis 2 súper monitores
- ⌨️ Teclado: Mini teclado + Lector DNIe
- 🖱️ Ratón: Mi ratón programable
- 🎧 Auriculares: Súper Auriculares TOP!
- 🖨️ Impresora: Mi fantástica impresora
- 🗄️ NAS Backup: Mi NAS para Backups
- 🔌 HUB USB: Mi HUB para puertos USB
- 📱 Smartphone: Mi Smartphone
- 📲 Tablet: Mi tablet para viajes
- ⌚ Smartwatch: Mi Smartwatch favorito
- 📹 Cámara deportiva: Mi cámara para deportes
¿QUÉ ES WGET?
GNU Wget es una herramienta libre que permite la descarga de contenidos desde servidores web de una forma simple. Su nombre deriva de World Wide Web (w), y de «obtener» (en inglés get), esto quiere decir: obtener desde la WWW. Fue escrito originalmente por Hrvoje Nikšić y por ser un proyecto de software libre tiene una gran cantidad de colaboradores directos e indirectos.
Actualmente soporta descargas mediante los protocolos HTTP, HTTPS y FTP. Entre las características más destacadas que ofrece Wget está la posibilidad de fácil descarga de mirrors (espejos) complejos de forma recursiva, conversión de enlaces para la visualización de contenidos HTML localmente, soporte para proxies, etc...
1.- REQUERIMIENTOS
Los únicos requerimientos para seguir este tutorial son los siguientes:
- PC con Windows, GNU/Linux ó MacOS
- Wget
- Conexión a Internet (opcional, pero recomendado para descargar Wget)
2.- REALIZAR UNA REQUEST NORMAL CON WGET
Cuando lanzamos una petición de descarga con Wget, por defecto se envían una serie de datos en el Header con una información básica. Si queremos ver dicha información, debemos usar el flag "-d" y si no queremos que descargue el contenido, podemos usar el flag "--spider" ó enviar la salida al stdout con "-O- -". En el siguiente ejemplo se puede ver el comando a utilizar con una URL de ejemplo:
raul@localhost:~$ wget -d -O- - https://www.raulprietofernandez.net/prueba_wget.html
---request begin---
GET /prueba_wget.html HTTP/1.1
User-Agent: Wget/1.16 (linux-gnu)
Accept: */*
Host: https://www.raulprietofernandez.net
Connection: Keep-Alive
---request end---
En las trazas anteriores, podemos ver el GET que estamos haciendo al servidor (si usamos la opción de spider, sería un HEAD en lugar de GET), en este caso la página "prueba_wget.html", el User-Agent que estamos usando (Wget/1.16 (linux-gnu)) el host https://www.raulprietofernandez.net y otros datos adicionales. En algunas ocasiones, querremos cambiar el User-Agent ó el Referrer porque los servidores remotos bloquean peticiones en función del software utilizado. En otras ocasiones, nos interesará forzar el campo host para hacer pruebas con VirtualHosts.
Wget nos permite personalizar estos campos dentro de la cabecera HTTP. Para ello, es necesario usar la opción "--header" junto con el campo que queremos personalizar. En el siguiente apartado se verá un ejemplo de como personalizar dichos campos.
3.- CAMBIAR EL HEADER
Para cambiar el header, debemos usar la opción "--header" y el correspondiente campo a cambiar. Por ejemplo en el siguiente ejemplo se puede ver como cambiamos el User-Agent, el Referer y Accept-Encoding a Yes:
raul@localhost:~$ wget -d -O- - --header="User-Agent: My Browser 1.0" --header="Referer: https://nasa.gov/" --header="Accept-Encoding: compress, gzip" https://www.raulprietofernandez.net/prueba_wget.html
En las trazas de wget (al estar en modo debug con -d) podemos ver lo siguiente:
---request begin---
GET /prueba_wget.html HTTP/1.1
User-Agent: My Browser 1.0
Accept: */*
Host: www.raulprietofernandez.net
Connection: Keep-Alive
Referer: https://nasa.gov/
Accept-Encoding: compress, gzip
Y en las trazas del servidor Apache la siguiente traza:
227.200.12.11 - - [18/Jan/2018:10:53:17 +0100] "GET /prueba_wget.html HTTP/1.1" 200 - www.raulprietofernandez.net "https://nasa.gov/" "My Browser 1.0" "-"
4.- ¿Y TODO ESTO, PARA QUÉ SIRVE? EJEMPLO REAL
Algunos servicios y páginas de internet, solo dejan acceder a ellos directamente si el "Referrer" desde el que les llega la petición está dentro de una White List con los correspondientes permisos.
Y os preguntaréis, ¿para que puede servirme esto en el día a día?
Para ello, vamos a ver un ejemplo real. Utilizaremos algunas webs de Internet donde solo dejan acceder (descargar) las imágenes de sus Webcams, si las peticiones llegan desde una lista de dominios en una White List (algo muy inseguro pero suficiente para impedir que un usuario no avanzado robe/enlace las imágenes) que ellos tienen definidos. En definitiva, lo que queremos hacer es descargar las imágenes de sus webcams.
¡Manos a la obra!
La página página/imagen que queremos descargar es una de las webcams de Fuentes de Invierno. La URL Oficial de Fuentes de Invierno es la siguiente: http://www.fuentesdeinvierno.com. Las webcams están alojadas en la página: http://fuentesdeinvierno.com/index.php?option=com_content&view=article&id=146&Itemid=116&lang=es
Página Web Oficial de Fuentes de Invierno
Si hacemos click con el botón derecho "Guardar imagen como" ó "Copiar link de la imagen", veremos que la imagen que nos guarda es una "mosca" encima de la imagen que usan como protección:
Y la imagen en cuestión que podremos bajar será la siguiente:
Mosca Fuentes de Invierno
Si pinchamos encima de la imagen, y con el botón derecho le decimos "Abrir Frame en nueva Pestaña", veremos que se nos abre la siguiente URL: https://www.hispawebcams.com/cam_embedded.php?id=000004
Iframe
Si intentamos usar las herramientas de desarrollo de Firefox/Chrome "Tools->Page Info" de Firefox, veremos que la imagen realmente es un fichero "php".
Imagen no accesible
Si visualizamos el código de la página anterior (botón derecho ver código fuente), veremos al final una parte del código con las siguientes líneas:
var URLs_file = './cams/000004/urls_allowed.json?t=' + param; var caminfo_file = './cams/000004/caminfo.json?t=' + param;
Si componemos la URL completa, veremos desde que Hosts está permitido el acceso directo a las imágenes de las Webcams: http://www.hispawebcams.com/cams/000004/urls_allowed.json
Si intentamos descargar la imagen con Wget: https://www.hispawebcams.com/cams/000004/get_imagen.php?f=1516271809040, obtendremos un mensaje de error, pero si la descargamos con Wget cambiando el Header, concretamente ponemos como referrer una de las URLS que tienen en la White List, veremos que la imagen se puede descargar sin problemas.
wget --header="Referer: www.fuentesdeinvierno.com" https://www.hispawebcams.com/cams/000004/get_imagen.php?f=1516272127592 -O fuentes.jpg
Imagen descargada
Este es un ejemplo real de "para que pueden servirnos cambiar los HTTP Headers". Y como se ha podido comprobar, esta protección que ponen algunos servidores se salta en 1 minuto ;)
5.- +INFO
El uso que hagáis de estas herramientas queda bajo vuestra total responsabilidad.
ENJOY!