linux - from - wget download website
wget con autenticación (5)
¿Cómo puedo descargar una página web que requiere un nombre de usuario y contraseña?
Por ejemplo, quiero descargar esta página después de haber ingresado el nombre de usuario y la contraseña:
Los siguientes comandos de wget deberían permitirle acceder a las páginas de un sitio web que requiere un nombre de usuario y contraseña:
wget http://username:[email protected]/url/
wget --http-user=user --http-password=password http://example.org/url/
Pruebe la solución presentada aquí:
http://www.unix.com/shell-programming-scripting/131020-using-wget-curl-http-post-authentication.html
# Log in to the server. This can be done only once. wget --save-cookies cookies.txt / --post-data ''user=foo&password=bar'' / http://server.com/auth.php # Now grab the page or pages we care about. wget --load-cookies cookies.txt / -p http://server.com/interesting/article.php
Nota para otros que puedan tropezar con esto:
- Lo anterior simula que el usuario hace un inicio de sesión manual en un sitio que tiene un formulario con dos campos de entrada: un
user
nombrado y unapassword
nombre - El formulario tiene su atributo de
action
establecido enhttp://server.com/auth.php
- El formulario no usa JavaScript
- Un buen indicio de que usa JavaScript es el atributo
onsubmit
en el elemento de formulario - Tenga en cuenta que esto está lejos de ser la única forma de establecer los atributos: usar JavaScript en cualquier lugar de la página o cualquiera de los archivos de script cargados estática o dinámicamente puede cambiar los elementos del formulario.
- Un buen indicio de que usa JavaScript es el atributo
- La mejor manera de ver esto es cargar la página y hacer una inspección en vivo con, por ejemplo, Firebug for Firefox
Por lo tanto, si los nombres de atributos y la URL de acción de formulario son diferentes, debe cambiar los parámetros al primer comando de wget
adecuada.
Si usa JavaScript, existe la posibilidad de que no funcione en absoluto; por ejemplo, en el caso del sitio web de OP, utiliza el hash de JavaScript del cliente, por lo que la llamada externa que usa wget
no establece los campos necesarios en el formulario (en el caso del sitio de Ubuntu, campo hash_passwrd
).
Tal vez esto ayude. El sitio en el que intentaba iniciar sesión tenía algunos campos ocultos que necesitaba obtener antes de poder iniciar sesión correctamente. Entonces, el primer wget obtiene la página de inicio de sesión para encontrar los campos adicionales, el segundo wget inicia sesión en el sitio y guarda las cookies, el tercero luego usa esas cookies para obtener la página que busca.
#!/bin/sh
# get the login page to get the hidden field data
wget -a log.txt -O loginpage.html http://foobar/default.aspx
hiddendata=`grep value < loginpage.html | grep foobarhidden | tr ''='' '' '' | awk ''{print $9}'' | sed s//"//g`
rm loginpage.html
# login into the page and save the cookies
postData=user=fakeuser''&''pw=password''&''foobarhidden=${hiddendata}
wget -a log.txt -O /dev/null --post-data ${postData} --keep-session-cookies --save-cookies cookies.txt http://foobar/default.aspx
# get the page your after
wget -a log.txt -O results.html --load-cookies cookies.txt http://foobar/lister.aspx?id=42
rm cookies.txt
Hay alguna información útil en esta otra publicación: superusuario -> usando wget para descargar archivos PDF de un sitio que requiere que se establezcan cookies
Usando las opciones:
--password=PASS
--user=USERNAME
es decir: wget http://www.example.com --user=joe --password=schmoe
También puede agregar el --auth-no-challenge
en caso de problemas adicionales:
es decir: wget http://www.example.com --user=joe --password=schmoe --auth-no-challenge
use las opciones --user=X --password=Y
para especificar un nombre de usuario de X
y una contraseña de Y