Diario de Rorschach, 20 de Julio de 2009:

Me cuentan que en el panorama de las descargas directas hay tres actores principales: MegaUpload, GigaSize y RapidShare. Todos proporcionan un uso gratuito (y limitado) y otro de pago (y sin restricciones). Aunque varía con la localización geográfica, normalmente sólo permiten una descarga simultánea, y algunos tiempos de espera entre descargas. Por ejemplo, los dos primeros te fuerzan a esperar cosa de un minuto antes de poder comenzar la descarga. El último es mucho más estricto: aparte de esa espera, te exige un tiempo de nada más y nada menos que 15 minutos para realizar una segunda descarga.

Como ocurre en estos casos, el amigo de un amigo quería bajarse precisamente de RapidShare (el de los 15 minutos entre descargas) varios ficheros. Con paciencia y unas cañas no hay problema… pero si el número de ficheros asciende a nada más y nada menos que 400, la cosa se convierte en inmanejable. En realidad, si no hay prisa para la descarga, de nuevo, no hay problema por hacerla… pero es demasiado laborioso. Además, mi amigo me contaba que le resultaba muy agobiante tener que andar pendiente de si habían ya pasado los 15 minutos de espera y podía poner el siguiente.

De modo que me pidió ayuda…

De un rápido vistazo es fácil darse cuenta de que RapidShare es el único de los tres que no tiene captcha, esos pequeños retos de letras retorcidas que sirven para averiguar si el solicitante de la página (o servicio) es o no humano. A si es que… gotcha! ¿Habría alguna manera de automatizar las descargas? Dado que no hay prisa (mi amigo no necesitaba esquivar la limitación de los 15 minutos) ¿podría hacerse algún programita para conseguir que los 400 enlaces se bajaran solos?

Con mi sombrero de analizador  de aplicaciones Web y un diccionario de alemán, me cargué de paciencia y empecé…

Cuando se introduce la URL de la descarga directa, RapidShare nos saluda con:

Elección tipo de usuario en RapidShare

Si se analiza el .html veremos que el botón “Free user” está en un formulario, que invoca a una URL de un mirror de RapidShare con el parámetro dl.start=Free. Por tanto, el primer paso de nuestro programilla es ir a la página del enlace original, buscar la URL del formulario (un simple grep servirá), y llamar a la URL usando el método Post de HTTP con el parámetro anterior.

Tras pulsar el botón, un usuario normal,  verá la segunda página:

Espera en RapidShare

En ella se exige una espera determinada, cuya longitud depende del tamaño del fichero solicitado. Si miramos en Matrix (esto… en el html) veremos que toda esta página está programada con JavaScript. Cuanto termina el contador, el html se automodifica y nos deja ver un botón de descarga, e incluso elegir el servidor espejo del que descargárnoslo. El código del botón, y las opciones de los servidores lo tenemos en realidad desde el principio en el .html, por lo que nuestro programilla podría leerlo sin la espera. Sin embargo, los servidores se comunican entre sí, y si nos vamos directamente al servidor del fichero éste nos dirá que necesitamos JavaScript en nuestro navegador al haber podido pulsar el botón sin hacer la espera :)

Por tanto, lo que tenemos que hacer en nuestro programa es sacar el tiempo y esperar. Para eso basta buscar var c= y mirar el valor asignado, que será justo el tiempo inicial de espera en segundos. De nuevo, un grep y un poco de magia de expresiones regulares son suficiente para sarcalo.

Una vez hecha la espera, un usuario normal verá la página completa, para realizar la descarga:

 Boton de descarga en RapidShare

Si se pulsa el “+” a la izquierda de “Advanced download settings” aparecen un grupo de botones de radio para elegir el servidor espejo del que descargarse el fichero, aunque normalmente el marcado automáticamente (elegido por RapidShare) será el que se use.

Nuestro programa debe extraer del .html (y de los botones de radio) la URL para comenzar la descarga. Para eso, lo sacamos de las líneas:

'<input  type="radio" name="mirror" onclick="... [mirror] ... " >

del formulario de elección del servidor. Si queremos escoger el que RapidShare nos ha propuesto, podemos buscar la cadena checked para saber cual estaba marcado.

Una vez elegido, saltamos a él. Pero, de nuevo, el botón está en un formulario, y la solicitud de descarga debe hacerse con Post. Ahora los parámetros son mirror=on&x=32&y=64 y listo. El servidor nos enviará sin más problemas el fichero.

Ten en cuenta, que en ocasiones la segunda página (la de la cuenta atrás) no nos llega así, sino con un error, bien porque tenemos que esperar 15 minutos hasta la siguiente descarga, bien porque no tenemos “slot de descarga” libre y nos toca esperar dos minutos a ver si hay más suerte la próxima vez. En ambos casos, nuestro programa debería salir limpiamente.

Una vez terminado, es suficiente con invocarlo un montón de veces, uno por cada URL que tengamos. Lo metemos en un script que espere 15 minutos entre invocaciones, y nos vamos a dormir.

Mi amigo me dice que anoche se bajó ya los 30 primeros enlaces.

3 Comentarios a “De captchas y Gotchas”

  1. Ding, ding, ding: tenemos un nuevo friki enmascarado al que le moló el último cómic que se leyó. Pon, al menos, Diario de Payens :-)
    Referente al post, menudo curro de análisis te has pegado. Good job.
    Peeero… para estas páginas yo suelo usar JDownloader. Es un gestor de descargas que funciona con muchos de estos servidores. Si lo tienes activo, el se encarga de capturar los enlaces cuando usas la opción “copiar enlace” en el menú contextual de Firefox. A veces es también capaz de cargarse los captcha (otras veces te lo pide él) y se suele fumar los tiempos de espera (aunque, al igual que los captchas, a veces no se los fuma, pero él se espera el tiempo necesario sin que tú te enteres). En general funciona bien.

  2. Ayy… se me ha adelantado McClain para decir lo del jDownloader ;)

    Pero sí, está claro que el mundo está volviendo a dividirse entre los frikis de pura cepa, de esos que no se amilanan si tienen que programarse algo para resolver un problema que les surge, y los frikis burgueses y acomodados como yo, que básicamente buscamos en Internet hasta que encontramos alguien que lo haya hecho ya por nosotros ;)

    (Reflexión: me alegro de que en los 90 no tuviera Internet, porque si no, no habría programado juegos para el MSX interesándome por la Informática… me los habría descargado hechos :-[)

  3. :)

    Ya sabía yo que alguien me saldría con una solución más cómoda que la mía :-)

    En realidad, busqué rápidamente por internet y no encontré nada que me resultara de fiar, y decidí liarme la manta a la cabeza.

    Es verdad que me llevó su tiempo… Una cosa buena es que me demostré a mí mismo que sé hacerlo y aprendí alguna cosa por el camino. Pero, sobre todo, lo mejor es que puedo ejecutarlo en Linux en consola en remoto y dejarlo como un demonio… en tantos ordenadores como quiera… O:-)

© 2011 Teclarios Suffusion theme by Sayontan Sinha