Perl est très pratique quant il s'agit de manipuler les pages HTML. Il m'a rendu de fiers services dans de nombreux domaine touchant à l'automatisation de connexion à des sites. L'objectif de ce petit tutorial est de montrer pas à pas comment se connecter sur la toile avec Perl et comment en extraire un contenu.
La gestion du protocole HTTP est pris en charge par le module LWP, tout commence donc par :
On va tout d'abord fabriquer un navigateur. LWP appelle cet objet un UserAgent.
La fabrication d'une requête de type GET (l'équivalent d'un click sur un lien) procède comme suit :
Cette requête peut être affinée pour permettre une meilleur simulation d'un "vrai" navigateur. Pour cela on modifie l'en-tête de la requête et ce qui est plus lié au protocole HTTP qu'à perl.
Une fois construite, la requête se lance simplement comme suit
Le retour est un objet de type Response. Il contient différent champs dont content contenant le texte de la page. is_success permet quant à lui de savoir si tout c'est bien passé et status_line contient le message d'erreur le cas échéant. Le résultat contient aussi un champs headers contenant différentes informations sur la page envoyée par le serveur.
Il y a trois méthodes pour s'authentifier sur le serveur web. Soit on indique les logins/mot de passe à la requête AVANT de la lancer:
Sinon on peut aussi donner nos droits au navigateur (voir $browser plus haut). C'est un peu plus compliqué car le navigateur peut ainsi contenir une liste de droits (c'est pratique) mais il va savoir quel droit choisir pour un site en fonction du domaine (realm) de celui-ci. Et nom, le domaine n'est pas forcement la partie finale de l'url. C'est spécifique à chaque serveur. Du coup en général, soit on connaît le domaine, soit on doit faire une requête pour rien (et donc essuyer un refus), regarder dans le header de la réponse le champ WWW-Authenticate. Il contient : Basic realm="mon_domaine", c'est le domaine.
Une fois que vous avez le domaine, il suffit de l'injecter dans le navigateur comme suit
Enfin, si vous utiliser windows comme serveur (une bien drôle d'idée), il est possible que l'authentification utilisé ici ne marche pas (sans blagues ?
), il faut donc passer le credentials comme suit :
Le paramétrage du proxy est porté par le navigateur ($browser), un peu comme les accréditations.
Cette ligne indique donc que, concernant les requêtes HTTP, le proxy à utiliser se trouve sur la machine monProxy au port 8080. Il est bien sur possible de rajouter une authentification au proxy lui-même :
Même chose que l'exemple précédent donc, mais pour les deux protocoles HTTP et HTTPS, et cette fois avec une authentification.
Il est enfin possible d'ajouter des domaines d'exception, qui n'utilisent pas le proxy :
Lorsque tout va mal, un truc pratique pour imposer à LWP de tracer toutes ses transactions. A mettre après le use LWP
Il est possible de limiter le temps d'attente à un serveur. Par exemple ici, 5 secondes :
LWP est sans aucun doute une excellente librairie d'accès au web. Elle est relativement intuitive, souple, et pourtant ne laisse sous silence aucun aspect des divers protocoles qu'elle prend en charge. ET ce tutorial n'est qu'un petit aperçu de ce qu'il est possible d'en faire.
- répondre
Dab, le 5 April, 2006 - 17:35As tu tenter l'installation de Perl sur pdaxrom ?
Et un lien sympa pour la route ...
http://articles.mongueurs.net/magazines/
voir notamment : Construire des robots pour le web
- répondre
Ulhume, le 5 April, 2006 - 17:45Je bookmark
Non, je n'ai pas encore essayé, juste fait du Java pour l'instant 
- répondre
Dab, le 5 April, 2006 - 18:00Si tu t'interesse au Perl + Web: jette un oeil a Catalyst. Tu connais peut-être ?
J'ai commencer une p'tite doc http://dab.free.fr
Très prometteur ...
@+ goto chez moi
- répondre
Dab, le 5 April, 2006 - 20:57Yes j'ai trouver un package Perl qui fonctionne
dead://mail.pdaxrom.org/contrib/voider_feed/
# perl -e 'print "Yep Perl sur Zaurus C1000
\n"'
Yep Perl sur Zaurus C1000
- répondre
Ulhume, le 5 April, 2006 - 23:04Y'a le binding gtk qui va avec ?
- répondre
Ulhume, le 5 April, 2006 - 23:07Je vas lire cela
Ceci dit, pour le web j'ai mon propre framework ajax en java... C'est tout de même (avec feu Delphi) mon langage maître. J'utilises surtout perl pour bidouiller des trames ou contruire des maquettes que j'implémente ensuite en java.
Poster un nouveau commentaire