¿Qué es WGET?

Wget es una aplicación, libre, escrita en C, sin interfaz gráfica y multiplataforma, que permite descargar contenidos desde una web a través de protocolos como: HTTP, HTTPS y FTP. Se puede utilizar como spider para descargar una página web entera y poder visualizarla en local sin necesidad de estar conectado a Internet.


Con esta herramienta podemos descargar una página web completa, ya sea para copias de seguridad o para verla luego sin estar conectados a Internet.

Si la página web requiere de login para acceder a ciertas partes de ella, entonces primero nos logeamos con Wget para obtener la cookie y la guardamos en un archivo:

wget http://www.server.com/login.php --post-data "user=Usuario&password=Contraseña" --save-cookies website.cookie --no-check-certificate -O - > /dev/null

–post-data: Especificamos los parámetros a pasarle al script para que nos autentique (usando el método POST), en este caso seria user y password pero esto varia según la web.
–save-cookies: Indicamos donde guardar el archivo con la cookie, esta cookie será necesaria después para descargar la web con nuestra sesión iniciada.
–no-check-certificate: No comprobar el certificado del servidor con las entidades emisoras de certificados.
-O -: No generar un archivo de salida ya que solo cogeremos la cookie.

Una vez que tengamos la cookie, ya podemos descargar la web completa:

wget -rkcp  -e robots=off -U Mozilla --limit-rate=80K --random-wait --load-cookies website.cookie --domains server.com --html-extension http://www.server.com

-r: Esta opción indica que descarge toda la web recursivamente.
-k: Convierte los enlaces de todos los documentos en rutas o urls relativas para poder navegar sin problemas.
-c: En caso de que queramos retomar la descarga después o si fallase, este parámetro le indica que retome la descarga por donde se interrumpió.
-p: Descarga todos los archivos, estilos y scripts necesarios para que la página web funcione correctamente.
-e robots=off: Ignora el archivo robots.txt, si existe en el servidor.
-U Mozilla: Especifica el User-Agent de Mozilla Firefox en las cabeceras HTTP, útil para ciertas webs que bloquean algunos User-Agents.
–limit-rate: 80k: Limita la descarga de archivos a 80 kb/s.
–random-wait: Espera un tiempo aleatorio entre una petición y otra para evitar un posible colapso en la web o ser detectados por algún sistema de seguridad.
–load-cookies: Carga la cookie de sesión previamente descargada.
–domains server.com: Indica que solo descarge el contenido de la web especificada y que no siga las urls externas encontradas.
–html-extension: Guarda todos los documentos en formato HTML.

Script en Bash para Linux

WebSite Downloader WebSite Downloader
#!/bin/bash

app_name="WebSite Downloader"
app_version="1.0.0"
app_author="Security Null"
app_last_update="2013-06-16"
app_usage="Usage: ./website_downloader.sh <website url> [compress 0|1] [verbose 0|1]"
app_example="Example: ./website_downloader.sh http://securitynull.net/login.php?user=username&pwd=password 1 1"

echo "$app_name $app_version ($app_author)"
echo

function download_website() {
	url=$1
	compress=$2
	if [ $3 -eq 1 ]; then
		verbose=""
	else
		verbose="--quiet"
	fi
	domain=$(echo "$url" | sed 's/https\?:\/\///')
	#domain=$(echo "$domain" | sed 's/www\.//g')
	uri="${domain#*\/|*}"
	domain="${domain%%\/*}"
	params="${uri#*\?}"
	uri=$(echo "$uri" | sed "s/\?$params//g")
	uri=$(echo "$uri" | sed "s/$domain//g")
	params=$(echo "$params" | sed "s!$domain/!!g")
	params=$(echo "$params" | sed "s!$domain!!g")
	website=$(echo "$url" | sed "s!$uri?$params!!g")
		
	echo " -WebSite URL:" $url
	echo " -Site:" $website
	echo " -Domain:" $domain
	echo " -URI:" $uri
	echo " -Params:" $params
	echo

	# Login
	if [ "$params" != "" ]; then
		echo " -Login WebSite..."
		wget ${website}${uri} $verbose --post-data "$params" --save-cookies $domain.cookie --no-check-certificate -O - > /dev/null
		if [ ${PIPESTATUS[0]} -eq 0 ]; then
			echo " -Cookie saved ($domain.cookie)"
		else
			echo " -Login ERROR"
			if [ -f $domain.cookie ]; then
				rm $domain.cookie
			fi
			exit 1
		fi
	fi
	
	# Download WebSite
	echo " -Downloading WebSite..."
	if [ "$params" != "" ]; then
		wget -rkcp -e robots=off -U Mozilla --limit-rate=80K --random-wait --domains $domain --html-extension $domain $verbose
	else
		wget -rkcp -e robots=off -U Mozilla --limit-rate=80K --random-wait --load-cookies $domain.cookie --domains $domain --html-extension $domain $verbose
	fi
	
	if [ ${PIPESTATUS[0]} -eq 0 ]; then
		echo " -Download Complete"
	else
		echo " -WebSite Download ERROR"
		exit 2
	fi
	
	# Compress
	if [ $compress -eq 1 ]; then
		echo " -Compressing WebSite..."
		tar -czvf $domain.tgz $domain/*
		if [ ${PIPESTATUS[0]} -eq 0 ]; then
			echo " -WebSite Compress ($domain.tgz)"
			if [ -f $domain.cookie ]; then
				rm $domain.cookie
			fi
			rm -r $domain
		else
			echo " -WebSite Compress ERROR"
			exit 3
		fi
	fi
	
	echo " -WebSite downloaded - FINISHED!!"
}

# Check params
if [ $# -eq 1 ]; then
	download_website $1 0 0
elif [ $# -eq 2 ]; then
	download_website $1 $2 0
elif [ $# -eq 3 ]; then
	download_website $1 $2 $3
else
	echo $app_usage
	echo
	echo $app_example
	exit 1
fi

Con este script en bash podemos descargar una web completa de forma sencilla.

website_downloader.sh http://securitynull.net/login.php?user=username&pwd=password 1

*NOTA: Las variables pasadas por GET al script, se envían por POST.