Usa wget per scaricare un file da un sito che richiede autenticazione

Informatica

Ormai quasi tutti siamo registrati su questo o quel sito, e usiamo risorse che per ragioni di sicurezza o simili sono accessibili solo dopo la presentazione di nome utente e password.

A me ad esempio è capitato di dover scrivere uno script per scaricare una lista di iscritti a una mailing list su Yahoogroups, processarla per poi rispedirla via e-mail al gruppo. E questo andava fatto periodicamente, possibilmente in modo automatico.

Per questi scopi, normalmente si usa wget, un'utilità da riga di comando per scaricare in modalità non interattiva file dalla rete, normalmente disponibile in tutte le distribuzioni GNU/Linux e in Mac Os X. I comandi descritti in questa pagina sono stati provati in Mandriva Linux, ma dovrebbe andar bene qualsiasi distribuzione Linux.

Fortunatamente, yahoogroups usa un metodo di autenticazione basato su cookie: al login il server invia al tuo browser un pezzetto di codice, un cookie appunto, dentro il quale ci sono le informazioni necessarie per identificarti. Se vuoi accedere a una pagina che richiede autenticazione, il server chiede il cookie al tuo browser, e se le informazioni in esso sono corrette ti spedisce la pagina, altrimenti ti rimanda altrove, magari di nuovo alla pagina di login.
Quanto detto in questa pagina vale per tutti i siti che usano un metodo di identificazione analogo.

Vediamo come fare questo con wget dentro i nostri script.

Il primo comando serve per identificarci:

wget --save-cookies cookie.txt --keep-session-cookies \
--post-data "login=USER&passwd=PASS" -O - \
http://miosito.com/login > /dev/null

In dettaglio:

  • --save-cookies cookie.txt dice a wget di salvare i cookie che riceve dentro il file cookie.txt. Lo utilizzeremo tra poco.
  • --keep-session-cookies gli dice di considerare tutti i cookie come cookie di sessione. Dovrebbe essere superfluo, ma non si sa mai...
  • --post-data "login=USER&passwd=PASS" dice a wget di riempire i campi "login" e "passwd" del modulo di autenticazione con le stringhe USER e PASSWORD. Qualche volta potrebbe essere necessario dare una sbirciatina al sorgente della pagina di login per controllare se è necessario usare dei nomi diversi da "login" e "passwd" per i campi da compilare.
  • -O - dice a wget di non salvare la pagina di login ma di mandarla sullo standard output. Successivamente, con > /dev/null buttiamo via questi dati, che non ci servono.
  • http://miosito.com/login è l'indirizzo della pagina di login del sito su cui mi voglio autenticare.

Il secondo comando usa il cookie che ci siamo procurati prima e scarica il file che ci interessa:

wget --load-cookies cookie.txt \
--output-document=filescaricato http://miosito.com/percorso/file

In dettaglio:

  • --load-cookies cookie.txt dice a wget che trova i cookie richiesti dal server nel file cookie.txt
  • --output-document=filescaricato salva il file scaricato dentro il file "filescaricato".
  • http://miosito.com/percorso/file è l'indirizzo del file da scaricare.

Così abbiamo la possibilità di mettere questi due comandi in uno script da far eseguire periodicamente a cron (o ad anacron, se il nostro pc non sta sempre acceso), in modo da poter scaricare ed elaborare periodicamente un certo file senza alcun intervento dell'utente.

Per approfondire, consulta la pagina man e info di wget.
Per sapere come eseguire periodicamente uno script, consulta le pagine man e info di cron, crontab, anacron e anacrontab (cron è "standard", anacron va installato appositamente).
Per questa pagina ho preso spunto da qui:
http://www.g-loaded.eu/2007/09/15/use-wget-or-curl-to-download-from-rapi...

Trackback URL for this post:

http://gerlos.altervista.org/trackback/215

commenti

ritratto di Geronimo

Grazie!

Mi è stato molto utile, grazie per averlo condiviso! :)

ritratto di Antonio

Fantastico

Proprio quello che cercavo e ha funzionato al primo tentativo! Grazie.

Invia nuovo commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.
  • Allowed HTML tags: <a> <em> <strong> <del> <cite> <code> <img> <ul> <ol> <li> <dl> <dt> <dd> <pre>
  • Linee e paragrafi vanno a capo automaticamente.
  • Insert Flickr images: [flickr-photo:id=230452326,size=s] or [flickr-photoset:id=72157594262419167,size=m].
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.

CAPTCHA
Per provare che sei un visitatore umano, rispondi a questa domanda. È per evitare l'inserimento di messaggi spam.
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.