Come superare la pagina di accesso con Wget?

Sto cercando di utilizzare Wget per scaricare una pagina, ma non riesco a superare la schermata di accesso.

Come posso inviare il nome utente / password utilizzando i dati del post nella pagina di accesso e quindi scaricare la pagina effettiva come utente autenticato?

In base alla pagina del manuale:

# 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 

Assicurati che il parametro --post-data sia correttamente codificato in percentuale (specialmente ampersands!) O che la richiesta non --post-data buon fine. Assicurarsi inoltre che l’ user e la password siano le chiavi corrette; puoi trovare le chiavi corrette denunciando l’HTML della pagina di accesso (controlla la funzione “inspect element” del tuo browser e trova l’attributo name nei campi username e password).

Ho dato direttamente i cookie di una connessione esistente a wget con –no-cookies e l’intestazione della richiesta HTTP del cookie. Nel mio caso si trattava di un login universitario Moodle in cui l’accesso sembra più complesso (utilizzando più richieste con un ticket di accesso). Ho aggiunto –post-data perché era una richiesta POST. Ad esempio, ottieni tutti gli elenchi di utenti Moodle:

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

Ho avuto lo stesso problema. La mia soluzione era di fare il login tramite Chrome e salvare i dati dei cookie in un file di testo. Questo è fatto facilmente con questa estensione di Chrome : Chrome cookie.txt estensione di esportazione .

Quando si ricevono i dati dei cookie, c’è anche un esempio su come usarli con wget. Viene fornita una semplice riga di comando di copia-incolla.

Se ne hai bisogno per una volta, puoi accedere tramite browser e copiare le intestazioni necessarie in seguito:

immagine dello schermo Usa “Copia come cURL” nella scheda Rete di Strumenti per sviluppatori (ricarica la pagina dopo l’apertura) e sostituisci l’indicatore di intestazione di arricciatura -H con l’intestazione di wget.

Se stanno usando l’autenticazione di base:

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

Se utilizzano i dati dei moduli POST, è necessario utilizzare invece qualcosa come cURL .

Non è necessario che cURL esegua i dati dei moduli POST. --post-data 'key1=value1&key2=value2' funziona bene. Nota: è anche ansible passare un nome file a wget con i dati POST nel file.

Volevo un one-liner che non scaricava alcun file; ecco un esempio di piping dell’output dei cookie nella prossima richiesta. Ho provato solo quanto segue su Gentoo, ma dovrebbe funzionare nella maggior parte degli ambienti * 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' 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' (questa è una riga, anche se probabilmente si adatta al tuo browser)

Se vuoi che l’output sia salvato su un file, cambia -O - in -O /some/file/name

Ho usato una soluzione che utilizzava lynx e wget. Quando si desidera utilizzare wget per scaricare alcuni file da un sito che richiede l’accesso, è sufficiente un file cookie. Per generare il file cookie, scelgo lynx. lynx è un browser web di testo. Per prima cosa è necessario un file di configurazione per Lynx per salvare i cookie. Crea un file lynx.cfg. Scrivi queste configurazioni nel file.

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

Quindi avvia lynx con questo comando:

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

Dopo aver inserito il nome utente e la password, selezionare ‘preserve me su questo pc’ o qualcosa di simile. Se accedi correttamente, vedrai una bella pagina web di testo del sito. E tu esci. Nella directory corrente, troverai un file cookie denominato cookie.file. Questo è ciò di cui abbiamo bisogno per wget.

Quindi wget può scaricare il file dal sito con questo comando.

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

Esempio per scaricare con wget sul server un grosso collegamento al file che può essere ottenuto nel tuo browser.

Ad esempio, utilizzando Google Chrome.

Accedi dove ti serve e premi download. Vai a scaricare e copiare il tuo link.

inserisci la descrizione dell'immagine qui

Quindi apri DevTools su una pagina in cui sei il login, vai su Console e ottieni i tuoi cookie, inserendo document.cookie

inserisci la descrizione dell'immagine qui

Ora vai al server e scarica il file: wget --header "Cookie: "

inserisci la descrizione dell'immagine qui