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).