wget –referer | Solución contra protección de enlaces activos

Vamos a hablar de un error relacionado con wget y la descarga de archivos. Se trata de la protección de enlaces activos o “Hotlinking”. La solución será usar wget –referer.

 

La protección de enlaces activos es una característica que tienen habilitada algunos sitios web, y lo que provoca es que los archivos de esas webs solo puedan descargarse desde esa web (o desde otros subdominios de la web), pero no desde otro dominio/sitio web desde el que se abra el enlace que lleva al archivo.
 

 
Ejemplo:

Queremos descargar un driver de AMD, en este caso es un driver que se encuentra alojado en www2.ati.com, y el enlace de descarga lo encontramos en support.amd.com.
 

 
Pues bien, resulta que desde una consola de Linux, hacemos un wget al archivo en cuestión a descargar, o sea:

wget https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-17.40-492261.tar.xz

 
Pero sospechosamente vemos que el archivo se descarga en menos de 1 segundo, y además el tamaño es pequeñísimo.
 

 

 
Aún así, llenos de fe, intentamos descomprimir el citado archivo, y resulta que entonces al intentar descomprimirlo con tar, de esta forma:
 

tar -Jxvf https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-17.40-492261.tar.xz

 

recibimos el error:

tar (child): No se puede conectar a https:

xz: (stdin) : Formato de archivo no reconocido

tar: Child returned status 128

tar: Error is not recoverable: exiting now

 

 

 

Solución al error: protección de enlaces activos | wget –referer

 

Parece ser que en la web de AMD no se permite la descarga de archivos (de https://www.amd.com/es) si no es realizada desde esa misma página de AMD (https://www.amd.com/es/support).

Para saltarnos esta restricción, y poder descargar el archivo con wget desde terminal de nuestro Linux, usaremos el parámetro –referer
 
Y en esto consiste la protección de enlaces activos de la que hablábamos al principio del artículo.
 

 

Explicación del parámetro –referer

 
Según el manual de wget (wget man):

–referer=url

Include `Referer: url’ header in HTTP request. Useful for retrieving

documents with server-side processing that assume they are always being

retrieved by interactive web browsers and only come out properly when

Referer is set to one of the pages that point to them.

 

O sea, traducción:

–referer = url

Se incluye el encabezado Referer: url ‘en la solicitud HTTP.

Es útil para recuperar documentos con procesamiento en el lado del servidor que asumen que siempre los recuperan los navegadores web interactivos y solo aparecen correctamente cuando Referer se configura en una de las páginas que los señalan.

 

 
Como decíamos, si no descargamos el archivo usando como Referer la página web en la que se encontraba el enlace, no podremos descargarlo.

 

Así que lo solucionaremos con el parámetro –referer, de esta forma:

wget --referer https://www.amd.com/es/support https://www2.ati.com/drivers/linux/ubuntu/amdgpu-pro-18.10-572953.tar.xz

 
Y veremos que ahora sí , se está descargando el archivo xz comprimido que contiene los drivers:

 

Esta solución la encontré en el blog de En mi maquina funciona, googleando sobre el problema (No se puede extraer tar.xz amdgpu)

 

Por cierto, al igual que wget –referer, podemos utilizar curl -e