2009-08-24 28 views
194

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

¿Cómo envío el nombre de usuario/contraseña usando datos de la publicación en la página de inicio de sesión y luego descargo la página real como un usuario autenticado?

+2

Para rizo: http://stackoverflow.com/questions/12399087/curl-to-access-a-page-that-requires-a-login-from-a-different-page –

Respuesta

276

Sobre la base de 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 es propiamente percent-encoded (especialmente los símbolos de unión!) O la solicitud probablemente se producirá un error. También asegúrese de que user y password sean las claves correctas; Puede encontrar las claves correctas investigando el código HTML de la página de inicio de sesión (consulte la función "inspeccionar elemento" de su navegador y busque el atributo name en los campos de nombre de usuario y contraseña).

+9

agregar --keep-session-cookies al primer comando, o el segundo? –

+4

No necesita '-p' (' --page-requisites') para esto. –

+12

También vale la pena agregar '--delete-after' a la primera recuperación para que no termine guardando la página de resultados al iniciar sesión. –

7

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

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

Si ellos están usando los datos del formulario publicado, tendrá que usar algo como cURL lugar.

+0

no tengo acceso para cambiar cualquier cosa en el servidor, es solo de lectura –

+7

Entonces? Nada de esto requiere que cambies nada en el servidor. – ceejayoz

8

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

21

Tuve 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: Chrome cookie.txt export extension.

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

+1

desafortunadamente no aplicable en scripting automatizado – Znik

40

Di directamente las cookies de una conexión existente para wget con --no-cookies y el encabezado de solicitud HTTP de Cookie. En mi caso, se trataba de un inicio de sesión en la universidad de Moodle, donde el inicio de sesión parece más complejo (al usar múltiples solicitudes con un ticket de inicio de sesión). Agregué - post-data porque era una solicitud POST. Por ejemplo, obtener toda Moodle lista de usuarios:

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

+2

Awesome tip. Esto es útil cuando puede acceder a la cookie desde su propia máquina y luego usarla desde otra máquina sin cabeza desde la línea de comando. :) – Tuxdude

20

Si lo necesita para un solo uso, se puede acceder a través del navegador y copiar las cabeceras necesarias después:

screenshot Uso "Copiar como cURL "en la pestaña Red de Developer Tools (vuelva a cargar la página después de abrirla) y reemplace el indicador de encabezado curl -H con wget's --header.

7

Quería una línea que no descargara ningún archivo; Aquí hay un ejemplo de conectar la salida de la cookie a la siguiente solicitud. Sólo probado el siguiente en Gentoo, pero debería funcionar en la mayoría de * 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' (esto es una línea, aunque es probable que envuelve en su navegador)

Si desea que la salida guardan en una archivo, cambie -O - a -O /some/file/name

0

Usé una solución que usaba lynx y wget. Cuando desee usar wget para descargar un archivo de un sitio que requiera iniciar sesión, solo necesita un archivo de cookie. Para generar el archivo de cookies, 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 estas configuraciones en el archivo.

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

A continuación, iniciar el lince con este comando:

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

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

Luego, wget puede descargar el archivo del sitio con este comando.

wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz 
Cuestiones relacionadas