Le souci : récupèrer du contenu protégé par un couple login / pass classique
Décidément les outils GNU n'ont pas fini de me surprendre.
Le dernier en date c'est wget.
Quand on voit la taille du man on se dit tout de suite qu'on peut faire un paquet de choses avec cet outil.
L'usage le plus courant de wget est le téléchargement de fichier sur la toile, que ceux ci soit stocké en http, ftp ...
Récemment je cherchais à récupérer la liste des flux que je consulte dans google reader.
Sous Reader l'export se fait au format standard OPML.
Bien sûr pour accéder à l'export il faut s'authentifier.
J'ai d'abord pensé faire un petit script ruby mais dans ce cas présent il y a mieux.
Si si !
S'authentifier avec sauvegarde des cookies
L'idée est de procéder en deux étapes :
- Se connecter en soumettant login / pass et récupérer le cookie pour le stocker dans le fichier de notre choix.
- Ré-utiliser ce cookie pour accéder au fichier qui nous intéresse [1].
Chaque étape se fait en une ligne de commande :
wget "https://www.google.com/accounts/ServiceLoginAuth?service=reader" --post-data="PersistentCookie=1&Email=email&Passwd=pass" --no-check-certificate --save-cookies="/tmp/gcookie" --output-document=/tmp/null
wget "http://www.google.com/reader/subscriptions/export" --no-check-certificate --load-cookies="/tmp/gcookie" --output-document="~/opml"
J'ai volontairement utilisées les options longues qui sont réellement explicites.
Dans la première étape on accède à l'url d'authentification et on soumet le formulaire en POST [2] en lui passant les différentes valeurs (notre email, notre mot de passe, et l'option pour rester connecté à base de cookie).
La valeur 1 est la valeur de la checkbox cochée.
Le --no-check-certificate nous permet de passer la validation du certificat https comme c'est souvent le cas, notamment pour les certificats auto-signés.
Le --save-cookies nous permet de spécifier le path ou sera stocké le cookie. Si l'authentification échoue le fichier sera quand même créé mais uniquement avec les headers de wget.
Enfin la page récupérée ici (page qui nous indique le succès ou non de notre connexion) ne nous intéresse pas, elle est donc copié dans le trou noir qu'est /dev/null.
La deuxième étape reprend les mêmes options que la première mise à part le --load-cookies qui nous permet d'accèder à une page en se basant sur notre fichier de cookies précédemment créé.
C'est tout, ton fichier de souscriptions est désormais dans ton $HOME.
Difficile de faire plus rapide même si le script est minimaliste et ne vérifie pas si l'authentification s'est bien passée etc ...

