.. module:: redireccions Redireccions HTTP (3 punts) =========================== El registre d'accés a un `servidor d'HTTP `__ (web) conté línies com les següents: .. literalinclude:: test-redireccions-analitza_linia.txt :start-after: >>> print('\n'.join(linies_l[:3])) :end-before: ---- linies Totes les línies tenen la mateixa estructura i contenen la informació següent: IP del client, domini, data i hora, petició d'accés rebuda, codi de l'estat i agent que envia la petició. Aquestes dades estan separades per un espai en blanc. Però, observa que la petició i l'agent estan delimitats per cometes dobles, i que la data i l'hora de la petició estan agrupades amb claudàtors. Per exemple, a la primera línia del registre anterior, - la IP del client és ``10.0.171.19``, - el domini és ``srv09.example.edu``, - la data i hora és ``[12/Mar/2023:00:01:05 +0100]``, - la petició és ``"GET /fi/examens/curs2019-2020/2/L2/G10/reescalat.html HTTP/1.1"``, - el codi d'estat és ``301`` i - l'agent és ``"Mozilla/5.0 (compatible; SemrushBot/7~bl; +http://www.semrush.com/bot.html)"``. Per tal d'analitzar dades d'accés a un servidor d'HTTP, dissenya les funcions següents i desa-les al mòdul :mod:`redireccions` (fitxer :file:`redireccions.py`): .. function:: analitza_linia(linia) Retorna la IP, el domini, la petició, l'estat i l'agent continguts en `linia`. El paràmetre `linia` (:class:`str`) és una línia d'un registre d'accés d'un servidor d'HTTP. La IP, el domini, la petició i l'agent són *strings* extrets de `linia`. L'estat també s'ha d'extreure de `linia`, però com a enter. Per exemple: .. literalinclude:: test-redireccions-analitza_linia.txt :language: pycon :start-after: ---- inici :end-before: ---- fi Fixa't que tant la petició com l'agent estan delimitats per cometes dobles a la línia, però que les cometes dobles no hi han de ser al resultat. Trobaràs més tests al fitxer :download:`test-redireccions-analitza_linia.txt` | .. function:: codi_3xx(linies) El paràmetre `linies` és una llista d\'*strings* en què cada element és una línia d'un registre d'accés d'un servidor d'HTTP. Retorna la llista dels accessos que tenen un codi de l'estat entre 300 (inclòs) i 400 (exclòs) i que corresponen a un `bot `__. Un accés correspon a un *bot* si l'agent de la petició conté ``+http``. Els elements de la llista resultant són **tuples** de tres elements: el domini, el recurs al qual es vol accedir i la IP. Dins la petició, el recurs està separat per un espai en blanc del mètode, que el precedeix, i de la versió del protocol, que el segueix. A la petició de la primera línia de l'exemple, el recurs és ``/fi/examens/curs2019-2020/2/L2/G10/reescalat.html``, el mètode és ``GET`` i el protocol ``HTTP/1.1``. .. literalinclude:: test-redireccions-codi_3xx.txt :language: pycon :start-after: ---- inici :end-before: ---- fi Trobaràs més tests al fitxer :download:`test-redireccions-codi_3xx.txt`