¿Cómo pasar la página de inicio de sesión con Wget?


Estoy tratando de usar Wget para descargar una página, pero no puedo pasar la pantalla de inicio de sesión.

¿Cómo puedo enviar el nombre de usuario/contraseña usando los datos de post en la página de inicio de sesión y luego descargar la página real como un usuario autenticado?

 220
Author: Peter Mortensen, 2009-08-24

9 answers

Basado en la página del manual:

# Log in to the server.  This only needs to be done once.
wget --save-cookies cookies.txt \
     --keep-session-cookies \
     --post-data 'user=foo&password=bar' \
     --delete-after \
     http://server.com/auth.php

# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
     http://server.com/interesting/article.php

Asegúrese de que el parámetro --post-data esté correctamente codificado por ciento (especialmente ampersands!) o la solicitud probablemente fallará. También asegúrese de que user y password son las claves correctas; puede encontrar las claves correctas investigando el HTML de la página de inicio de sesión (busque en la función "inspeccionar elemento" de su navegador y encuentre el atributo name en los campos nombre de usuario y contraseña).

 300
Author: jarnoan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-13 12:14:44

Le di directamente cookies de una conexión existente a wget con --no-cookies y el encabezado de solicitud HTTP Cookie. En mi caso fue un login de la universidad Moodle donde el login parece más complejo (usando múltiples peticiones con un ticket de login). Agregué post post-data porque era una solicitud POST. Por ejemplo, obtenga la lista de todos los usuarios de Moodle:

wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php

 44
Author: baptx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-24 13:02:32

Si lo necesita para un solo uso, puede iniciar sesión a través del navegador y copiar los encabezados necesarios después:

pantallazoUse "Copiar como cURL" en la pestaña Red de Herramientas para desarrolladores (vuelva a cargar la página después de abrir) y reemplace la bandera de encabezado de curl -H y --data con wget --header y --post-data.

 26
Author: user,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-28 00:18:30

Yo tenía el mismo problema. Mi solución fue hacer el inicio de sesión a través de Chrome y guardar los datos de las cookies en un archivo de texto. Esto se hace fácilmente con esta extensión de Chrome: Cookie de Chrome.extensión de exportación txt .

Cuando obtiene los datos de las cookies, también hay un ejemplo sobre cómo usarlos con wget. Se le proporciona una línea de comandos simple de copiar y pegar.

 24
Author: Thor-Erik Rødland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-26 00:48:24

Si están usando autenticación básica:

wget http://username:[email protected]/page.html

Si están usando datos de formularios publicados, necesitarás usar algo como cURL en su lugar.

 8
Author: ceejayoz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:33:24

No necesitas cURL para hacer los datos del formulario publicado. --post-data 'key1=value1&key2=value2' funciona bien. Nota: también puede pasar un nombre de archivo a wget con los datos POST en el archivo.

 8
Author: J. Piel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-26 00:47:24

Quería un trazador de líneas que no descargara ningún archivo; aquí hay un ejemplo de canalización de la salida de la cookie en la siguiente solicitud. Solo probé lo siguiente en Gentoo, pero debería funcionar en la mayoría de los entornos *nix:

wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page' (esta es una línea, aunque probablemente se ajusta en su navegador)

Si desea que la salida se guarde en un archivo, cambie -O - a -O /some/file/name

 8
Author: Caleb Gray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-26 03:05:04

Usé una solución que usaba lynx y wget. Cuando desea utilizar wget para descargar algún archivo de un sitio que requieren inicio de sesión, solo necesita un archivo de cookie. Para generar el archivo cookie, elijo lynx. lynx es un navegador web de texto. Primero necesita un archivo de configuración para que lynx guarde la cookie. Crea un archivo lynx.cfg. Escriba esta configuración en el archivo.

SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file

Luego inicie lynx con este comando:

lynx -cfg=lynx.cfg http://the.site.com/login

Después de introducir el nombre de usuario y la contraseña, y seleccione 'preservarme en este pc' o algo similar. Si inicia sesión con éxito, verá una hermosa página web de texto del sitio. Y te desconectas. En el directorio actual, encontrará un archivo cookie llamado cookie.file. Esto es lo que necesitamos para wget.

Entonces wget puede descargar el archivo desde el sitio con este comando.

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
 2
Author: PokerFace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-19 08:32:45

Ejemplo para descargar con wget en el servidor un enlace de archivo grande que se puede obtener en su navegador.

En el ejemplo usando Google Chrome.

Inicie sesión donde lo necesite y presione descargar. Ve a descargar y copia tu enlace.

introduzca la descripción de la imagen aquí

Luego abra DevTools en una página donde inicie sesión, vaya a Console y obtenga sus cookies, ingresando document.cookie

introduzca la descripción de la imagen aquí

Ahora, vaya al servidor y descargue su archivo: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>

introduzca la descripción de la imagen aquí

 1
Author: Alex Ivasyuv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-13 09:24:02