file:///home/logilab/docbook/xslt/common/common.xsl; Line 1877; Column 20; Error: no ID for constraint linkend: memory. file:///home/logilab/docbook/xslt/html/xref.xsl; Line 44; Column 20; XRef to nonexistent id: memory file:///home/logilab/docbook/xslt/common/common.xsl; Line 1877; Column 20; Error: no ID for constraint linkend: memory. file:///home/logilab/docbook/xslt/html/xref.xsl; Line 44; Column 20; XRef to nonexistent id: memory file:///home/logilab/docbook/xslt/common/common.xsl; Line 1877; Column 20; Error: no ID for constraint linkend: memory. file:///home/logilab/docbook/xslt/html/xref.xsl; Line 44; Column 20; XRef to nonexistent id: memory Documentation sur l'utilisation du proxy HTTP

Documentation sur l'utilisation du proxy HTTP

Adrien Di Mascio


Table des matières

Recette permettant la l'utilisation du proxy HTTP : Web Proxy
http_parse_request
get_and_filter
Write_back_to_socket
Paramètrage de memory.xml pour une utilisation du proxy
Le fichier spam.xml
Bugs répertoriés

Résumé

Le but de ce module est de pouvoir personnaliser la navigation sur Internet en passant par un proxy. L'utilisation du proxy se fait par l'intermédiaire d'une unique recette appelée plusieurs fois.

Pour utiliser le proxy, lancer Engine avec l'option --socket-manager

Recette permettant la l'utilisation du proxy HTTP : Web Proxy

Le première chose à faire pour utiliser le proxy est de configurer votre navigateur pour qu'il passe par le proxy pour se connecter aux serveurs web. Par exemple, si vous utilisez netscape, allez dans "Edition" puis "Préférences". Dans le menu "avancées", choisissez "proxy", puis cochez "Configuration manuelle du proxy". Il reste encore à indiquer à Netscape où se trouve votre proxy. Pour cela, cliquez sur "afficher", dans le champ HTTP, tapez "localhost" et dans le champ "port", entrez le numéro de port d'écoute du proxy (voir ???).

Votre navigateur va passer à présent par le proxy pour se connecter aux serveurs HTTP. La recette "Web proxy" sera lancée à chaque requête du navigateur. Elle comporte quatre étapes et deux transitions sans conditions :

http_parse_request

Cette action va recevoir la requête du navigateur en écoutant sur le port choisi mais va la décomposer de manière à en extraire toutes les informations nécessaires (url, en-têtes, protocole, ...). Ces informations, une fois triées, sont placées dans la mémoire de Narval pour être transmises aux prochaines actions. En effet, une fois cette étape terminée, la recette se poursuit en effectuant deux actions parallèlement. Nous nous contenterons de détailler une seule de ces deux branches, l'autre ne contenant qu'une action servant à maintenir une sorte de journal.

get_and_filter

Cette l'action est la plus "lourde" de la recette. Elle peut se décomposer en trois principales étapes :

  • On récupère les données concernant la requête et le filtrage demandé dans la mémoire de Narval.

  • Ensuite, on relaie la requête que l'on a reçue du navigateur et on récupère les informations à partir du serveur en question. Si la demande de traduction a été faite dans memory.xml (voir ???), on essaye de trouver la langue du document récupéré grâce au module "guesslang" du paquetage "infopal" (s'il n'est pas présent, la traduction n'a pas lieu) et si nécessaire, on traduit le document. Pour cela, on utilise le traducteur d'Altavista.

    Par exemple, si l'url d'origine était

    http://br.yahoo.com
    (page d'accueil de Yahoo Brésil), et que l'utilisateur ne parle qu'anglais, alors ,on réeffectue une requête avec l'url :
    http://babel.altavista.com/urltrurl?lp=pt_en&url=http%2F%3A%3Abr.yahoo.com%3A.
             
    et on récupère les données renvoyées par le traducteur.

  • La dernière partie de cette action consiste à filtrer les images et le texte de la page. On peut, pour filtrer les images, soit se baser sur le nom de serveur, soit sur le nom de domaine, soit sur les règles définies dans spam.xml (voir ???). Pour filtrer les images, l'idée est la suivante : on récupère le document HTML de la page, on le parcourt et dès que l'on rencontre une référence à une image qu'il faut filtrer, on la remplace par une image blanche locale. Ainsi, le navigateur n'ira pas télécharger ces images et un "blanc" apparaîtra sur la page. En ce qui concerne, le filtrage du texte, il faut là encore, définir les règles que l'on souhaite appliquer dans le fichier spam.xml.

    Le filtrage des images et du texte se base en fait sur la même idée : parcourir le document HTML et remplacer tous les motifs (par exemple les adresses URL) non désirées par ce que l'on veut, on utilise donc pour cela les expressions régulières.

  • Une fois les données récupérées, on les places dans la mémoire de Narval en les ordonnant selon leur "type" : en-tête, contenu, ...

Write_back_to_socket

Dans cette action, on récupère les données présentes dans la mémoire de Narval, qui correspondent en fait à la réponse du serveur filtrée, que l'on la renvoie au Navigateur.

Paramètrage de memory.xml pour une utilisation du proxy

Le fichier memory.xml peut contenir diverses informations relatives à l'utilisation de Narval. En ce qui concerne le proxy, les informations suivantes sont nécessaires :

  • Le numéro de port d'écoute du proxy doit être précisé obligatoirement. Il faut pour cela créer un élément server-socket avec en attribut un numéro de port et le nom de la recette à appeler à chaque requête du client. Par exemple, on aura :

    <server-socket port="7777" recipe="proxy.Web proxy"/>
            
    Le proxy écoutera alors sur le port 7777. Il faudra donc préciser au navigateur que c'est sur ce port que se trouve le proxy.

L'intérêt du proxy est de pouvoir filtrer et traiter les données que l'on reçoit, il est donc nécessaire pour cela de préciser le mode de traitement de l'information. Les informations suivantes sont facultatives pour faire fonctionner le proxy mais sans elles, le proxy ne fera rien de particulier. Il y a deux types d'information à fournir pour utiliser l'ensemble des possibilités du proxy : le mode de filtrage et les langues parlées :

  • En ce qui concerne le mode de filtrage, il faut placer par exemple l'élément suivant :

    <junkbuster-method value="18" />
               
    La valeur de l'attribut "value" dépend du mode de filtrage souhaité. Les différentes valeurs possibles sont :
    • 1 pour un filtrage des images en fonction du nom de serveur

    • 2 pour un filtrage des images en fonction du nom de domaine

    • 4 pour un filtrage des images en utilisant les règles définies dans le fichier spam.xml

    • 8 pour un filtrage des images et du texte en fonction des règles "filter" définies dans le fichier "spam.xml"

    • 16 pour permettre la traduction à la volée quand nécessaire

    • Toute combinaison de ces valeurs pour cumuler les différentes méthodes. Par exemple, la valeur 18 permettra un filtrage des images selon le nom de domaine et permettra également la traduction (18 = 16 + 2)

  • Pour décrire les langues comprises par l'utilisateur, ce qui n'est utile que lorsque le mode traduction est activé, il faut placer un élément "spoken-languages". Par exemple, on pourra avoir dans memory.xml :

                
                   <spoken-languages>
                    <language name="italian" code="it" />
                    <language name="english" code="en" />
                    <language name="french" code="fr" />
                   </spoken-languages>
                
               
    Ceci aura pour effet de préciser au proxy que vous parlez l'italien, l'anglais et le français. Ainsi, les pages qui seront dans une autre langue seront traduites. L'ordre dans lequel sont placés les éléments "language" est important puisque le proxy essaiera de traduire dans cet ordre là. Dans l'exemple ci-dessus, il essaiera de traduire d'abord en italien puis en anglais et enfin en français.

    La valeur de l'attribut "code" est également importante puisque c'est cette valeur qui servira d'identifiant au traducteur d'Altavista. A ce jour, les langues reconnues sont :

    • L'anglais, code : "en". Le traducteur permet la traduction de l'anglais vers toutes les langues citées

    • L'allemand, code : "de". Le traducteur permet la traduction de l'allemand vers l'anglais et le français

    • L'espagnol, code : "es". Le traducteur permet la traduction de l'espagnol vers l'anglais

    • L'italien, code : "it". Le traducteur permet la traduction de l'italien vers l'anglais

    • Le portuguais, code : "pt". Le traducteur permet la traduction du protuguais vers l'anglais

    • Le français, code : "fr". Le traducteur permet la traduction du français vers l'anglais et l'allemand

    La valeur de l'attribut "name" n'a pas d'importance.

Si vous souhaitez écrire une autre recette qui est detinée à remplacer le proxy, vous pouvez, dans l'élément "server-socket" changer le nom de la recette à appeler en mettant le nom de votre recette dans l'attribut "recipe".

Le fichier spam.xml

C'est dans ce fichier que sont stockées des règles plus précises concernant le filtrage des images d'une page Web. Ce fichier contient plusieurs types d'éléments possibles :

  • Les éléments "trash" et "allow" qui respectivement refusent ou autorisent les images provenant de certain sites.

    Les éléments "rule" qui définissent un hôte et les adresses à refuser ou à accepter sur sa page. Par exemple :

               
                <rule  host='.businessweek\.com.*' url='.*\/sponsors.*'/>
               
              
    aura pour effet de désigner le site "businessweek.com" et de préciser qu'on ne parle que des adresses dont l'url contient le répertoire "sponsors". Une fois que l'on a désigné dans un élément "rule" ces url particulières, on n'a encore rien interdit ou autorisé. Il faut pour cela placer les éléments "rule" dans des éléments "allow" ou "trash".

    Dans le cas particulier ou l'on veut interdire l'accès complet à une url, et non pas seulement à certaines images sur cette page, on ne précise pas d'attribut "url".

  • Les éléments "and" sont placés dans les éléments "trash" ou "allow" et contiennent une liste d'éléments "rules". Ils servent à définir un ensemble de règles à appliquer en même temps.

  • Les élements "filter" sont utilisés pour le fitrage de texte. Ils sont composés d'éléments "text_match" et d'éléments "replace_by". Par exemple, la règle suivante :

                   <filter host='*.com'>
                     <text_match>Internet</text_match>
                     <replace_by>________</replace_by>
                   </filter>
               
    aura pour effet de remplacer le mot "Internet" par "________" dans toutes les pages internet dont l'adresse se termine par ".com".

    Le filtrage de texte s'effectue dans le code HTML de la page, par conséquent, il se fait également dans les balises. Il est donc important de faire attention à ce que l'on place dans les éléments "text_match" et "replace_by".

Chaque règle ("allow" ou "trash") doit être contenue dans un élément "policy". Plusieurs règles peuvent être placées à la suite dans un élément "policy". Le fichier spam.xml contiendra un élément racine "spam-policy" qui contiendra tous les éléments "policy"

Bugs répertoriés

  • Le traducteur ne permet de traduire que des groupes d'environ 150 mots. Par conséquent, dans certains cas, il ne traduira que le début de la page.

  • Les requêtes de type "POST" posent régulièrement des problèmes, surtout avec l'utilisation conjuguée du traducteur.

  • Seules les images contenues dans des balises "img" sont filtrées, par conséquent, les images alimentées par d'autres moyens (javascript, Flash, ...) ne sont pas supprimées

  • Les erreurs du type "Connection réinitialisée par le correspondant" ("Connection reset by peer") sont mal gérées