Hoy me he encontrado con un problema, una website de muy mal agüero no me dejaba buscar informacion dentro de una tabla que ocupaba 172 pagina. Es un problema buscar entre tal numero de paginas cuando no sabes exactamente donde demonios esta la entrada, así que he pensado que nada como un for y un wget:
for i in $(seq 0 1 172)
do
wget "http://sitiowarro.org/tabla.php?page=$i"
done
Te crees el rey del mambo hasta que te das cuenta que si no estas logueado, no puedes ver la dichosa pagina
Así que dispuesto a solucionarlo, he echado mano del man del wget. Lo que nos interesa es esto:
--post-data=string
--post-file=file
Use POST as the method for all HTTP requests and send the specified
data in the request body. "--post-data" sends string as data,
whereas "--post-file" sends the contents of file. Other than that,
they work in exactly the same way.
La técnica consiste en hacer un POST con el login usando cookies, es decir
marcando que se nos recuerde el login y cargar esas cookies cuando vamos a descargar las paginas.
Entonces
wget --save-cookies cookies.txt --post-data "patatinpatatan" [url]http://sitiowarro.org/login.php[/url]
for i in $(seq 0 1 172)
do
wget --load-cookies cookies.txt -p "http://sitiowarro.org/tabla.php?page=$i"
done
El único problema que nos queda es averiguar que demonios ponemos en el POST. Los datos son el nombre de usuario y el password básicamente, pero cada pagina usa sus variables.
Tenemos que hechar mano de un sniffer. Como no estoy muy puesto en sniffers, usaré ethereal corriente y moliente. Inicio el sniffeo, hago login en la pagina (marcando lo de recordar la sesión) y paro el sniffeo.
Ahora toca buscar entre los resultados del protocolo HTTP (los filtros van bien para esto, pero si no teneis mucha carga de red, no son necesarios) un método POST. Seleccionamos la entrada del POST y buscamos la parte del paquete que especifica DATA. Es posible que el paquete se encuentre partido, así que buscad por continuaciones del paquete: es la ultima parte, al menos en mi caso.
Puede saliros algo como esto:
loginid=Raharu&password=atitelovoyadecir
Solo falta meterlo en el primer wget (donde pone patatinpatatan) y disfrutar de un trabajo conseguido.
Esta forma, puede ser la más complicada de conseguir lo que pretendia, pero me ha hecho ilusión descubrirla yo solo ^^U. Si teneis alguna duda, como por ejemplo, ¿que demonios estas haciendo? responderé encantado.
Saludos y felices examenes.
Edito: He puesto esto en el weblog, así que sigue la
CCEdito2: Si Ark lo ve y quiere meterlo en el wiki, es libre de hacerlo