TP - LIF12 syst`eme d`exploitation

Transcription

TP - LIF12 syst`eme d`exploitation
Départment d’Informatique
TP - LIF12 système d’exploitation
Lecture d’une page web
7 mars 2016
I
Introduction
Vous devez programmer un logiciel permettant de télécharger un site web pour une consultation hors ligne
comme le fait wget. La version de base doit pouvoir télécharger une page via le protocole HTTP, l’analyser,
reconnaı̂tre et télécharger les liens vers les images, les scripts javascript et les css, retrouver les liens vers
d’autres pages du même site et les télécharger jusqu’à une certaine profondeur. L’une des difficultés est que les
liens présents dans les pages web doivent être modifiés pour pointer sur la version hors ligne du site.
II
Comportement du programme
Nous vous proposerons un script pour tester le programme, il est donc necessaire de bien suivre le format
demandé. Votre programme doit être en ligne de commande, il doit prendre 2 arguments et des options :
. / wget h t t p : / / u r l . a . t e l e c h a r g e r / r a c i n e d u s i t e / page . html r e p e r t o i r e /
Le premier paramètre est l’url de la page à télécharger, le second est le répertoire dans lequel votre programme doit sauvegarder les pages. On considère qu’une page est réellement téléchargée si l’ensemble de ce
qui la constitue l’est, c’est-à-dire les images (balise img), les scripts javascript (balise script dont le type est
text/javascript et avec un lien via le champ src) et des feuilles css (baslise link dont le type est text/css
et le lien est donné via le champ href). De plus, votre programme doit être capable de suivre les liens présents
dans la page jusqu’à une profondeur donnée via une option de lancement. Une profondeur de 1 signifie la page
et toutes les pages mentionnées dans cette page (via une balise a ) leurs images, script, ... mais pas leur
liens à elle. On ne doit télécharger que les liens sur le même site.
Votre programme doit concerver l’organisation du site par rapport à sa racine. Par exemple, si le site
téléchargé est http://url.a.telecharger/racine_du_site/page.html dans le répertoire rep sauv/, si une
page fait référence à la page http://url.a.telecharger/racine_du_site/sous_rep/figure.png, votre programme doit télécharger ce fichier dans rep sauv/sous rep/figure .png. Il devra aussi modifier le lien présent dans
la page de départ pour que ce dernier pointe sur la sauvegarde locale.
Votre programme doit permettre au moins 5 options :
−h ou −−help qui affiche une aide.
−p ou −−prof qui permet de choisir la profondeur de téléchargement.
−d ou −−debug qui lui permet d’afficher des informations de débugage.
−−nb−th−get qui permet de fixer le nombre de threads de téléchargement.
−−nb−th−analyse qui permet de fixer le nombre de threads d’analyse.
Pour vous aider à gérer ces options, nous vous fournissons un programme d’exemple.
III
Fonctionnement du programme
Votre programme doit être multithread. Il doit principalement avoir 2 groupes de threads :
— les threads de téléchargement qui doivent récupérer les pages ;
— les threads d’analyse qui lisent le code html des pages téléchargées, en extraient les nouvelles pages à
télécharger et sauvegardent la page après avoir modifié ses liens.
Les deux groupes doivent s’échanger des informations via 3 structures :
— l’ensemble des pages qui contient toutes les descriptions des pages à traiter ou déjà traitées ;
— la file des pages à télécharger qui contient les identifiants de page non encore téléchargées ;
Université Claude Bernard Lyon I
1
Départment d’Informatique
— la file des pages à analyser qui contient les identifiants de page téléchargées mais non encore traitées.
/index.html
/C/index.html
/C++/index.html
/aide/index.html
/img/logo.jpg
...
url
http://www.univ.fr/apprendre_la_programation/
http://www.univ.fr/apprendre_la_programation/C/
http://www.univ.fr/apprendre_la_programation/C++/
http://www.univ.fr/apprendre_la_programation/aide/
http://www.univ.fr/apprendre_la_programation/img/logo.jpg
...
get
oui
oui
oui
non
non
...
analyse
oui
non
non
non
non
...
lit
/é
cr
it
/é
cr
lit
it
à télécharger
/img/logo.jpg
lit
/aide/index.html
dé
po
se
T ha2
T ht2
T ha3
T ht3
T ha4
T ht4
T ht1
Thread
de
téléchargement
dé
po
se
à analyser
/C/index.html
lit
T ha1
Thread
d’analyse
/C++/index.html
Chaque thread d’analyse récupère l’url d’une page à télécharger et le fait. Si cette dernière est une page
binaire (image, lien vers fichier pdf ...) ou de script, il la sauvagarde directement. Par contre, si cette dernière
est une page html (type mime text/html), il la transmet aux threads d’analyse. Ces derniers parcours la page à
la recherche de balise et, ajoutent ajoutent éventuellement des pages à la liste des pages à télécharger, calculent
la nouvelle adresse des pages liées et les transmettent au thread de téléchargement.
IV
Notation
C’est votre enseignant de TP qui notera votre projet, cela signifie que c’est à lui de vous expliquer les détails
de ce qui est demandé. De plus, vous ne devez pas changer de groupe. Le barème prévu est le suivant :
— Si le programme permet de télécharger une page simple (1pt).
— S’il est capable de gérer les redirections, les modes simples ou chunked (2pt).
— S’il permet de télécharger complètement les images, script ... (2pt).
— S’il gère le multithreading (1pt).
— S’il gère correctement les variables partagées (2pt).
— S’il permet de suivre les liens sur une certaine profondeur (2pt).
— Qualité de programme c’est-à-dire la robustesse vis-à-vis des erreurs, le fait de ne pas télécharger la
même page plusieurs fois, ... (+ ou - ? ?pt).
Cette partie forme la base du travail que votre projet doit permettre pour obtenir une note supérieure à 10.
Pour obtenir une bonne note vous devez de plus implémenter des options, par exemple :
2pt Gérer les modes de transfert compressé, c’est-à-dire que votre programme doit transmettre
Accept-Encoding: gzip lors de la requète, reconnaı̂tre si le serveur passe des données compressées et
les décompresse à la volée.
3pt Gérer le mode https en utilisant openssl (voir le fichier popssl.c du CC mi-parcours de l’automne 2013
dans les annales pour un exemple de client utilisant SSL).
2pt Gérer d’autres formes de liens comme ceux proposés dans les pages dokuwiki.
3pt Gérer l’authentification via le CAS de l’université (suppose que SSL fonctionne).
2pt Permettre de suivre des liens hors du site.
?pt ...
La date prévue pour rendre le projet est le mardi 4 avril 9h du matin. Vous devez rendre une archive avec
un programme qui fonctionne, les sources pour le compiler ainsi qu’un makefile (ou n’importe quel système
de compilation du même genre). De plus, il est conseillé de décrire ce que vous avez fait dans un fichier
accompagnant l’archive afin que votre encadrant n’oublie pas certaines options. Enfin, nous devons vous voir
travailler et avancer sur le projet, un programme de bonne qualité sortie du chapeau n’aura pas de note
positive. De plus, vous devez être présents durant les séances : sur les 4 séances prévues, seule une absence est
tolérée. Une absence supplémentaire vous donnera la note de 0 si elle n’est pas justifiée (et annulera la note de
projet si toutes les absences le sont).