IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Python Discussion :

Transposition des Headers HTTP et IMAP vers des objets. Bibliothèque parsing headers.


Sujet :

Contribuez Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 12
    Points : 35
    Points
    35
    Par défaut Transposition des Headers HTTP et IMAP vers des objets. Bibliothèque parsing headers.
    Bonjour à tous,

    Je partage avec vous une bibliothèque permettant de vous simplifier la vie lorsque vous manipulez des headers HTTP ou IMAP. Peu-importe le type contenant les headers.
    Manipuler des headers, le ba.-ba me diriez-vous ? Détrompez-vous, sachez que peu de support 'ready-to-use' existe pour pouvoir exploiter les headers sans faire d'erreur.

    Prenez le cas suivant : "Je souhaite connaître le charset déclaré dans l'header Content-Type de ma réponse lorsque je sollicite www.python.org"

    Je remarque souvent des portions de code similaires à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from requests import get
     
    response = get("https://www.python.org")
     
    charset = response.headers['Content-Type'].split(';')[-1].split('=')[-1].replace('"', '')
    print("www.python.org déclare utiliser", charset, "comme encodage du corps")
    Ce code est évidemment très illisible et n'est certainement pas générique. On se retrouve souvent à écrire de petite fonction comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    parse_charset_headers()
    dans nos utilitaires.

    En utilisant la bibliothèque kiss-headers, vous abandonnez la syntaxe lourde et diminuez le risque inhérent.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    from requests import get
    from kiss_headers import parse_it
     
    response = get("https://www.python.org")
    headers = parse_it(response)
     
    if not headers.content_type.has("charset"):
        print("www.python.org ne déclare pas de charset pour le corps")
        exit(1)
     
    print("www.python.org déclare utiliser", headers.content_type.charset, "comme encodage du corps")
    A l'aide de la fonction parse_it, vous transformez vos headers en objets. Tout le parsing est déjà réalisé en amont.
    En plus de ça, la bibliothèque :

    • Gère les entrées multiples pour un seul header
    • Gère les entrées fusionnées dans un seul header
    • Gère les attributs multiples dans les headers
    • Et bien plus encore


    Cette bibliothèque vous permet aussi de réaliser l'inverse, c'est à dire, créer vos headers en utilisant des objets prêt à l'usage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    from kiss_headers import *
     
    headers = (
        Host("developer.mozilla.org")
        + UserAgent(
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0"
        )
        + Accept("text/html")
        + Accept("application/xhtml+xml")
        + Accept("application/xml", qualifier=0.9)
        + Accept(qualifier=0.8)
        + AcceptLanguage("en-US")
        + AcceptLanguage("en", qualifier=0.5)
        + AcceptEncoding("gzip")
        + AcceptEncoding("deflate")
        + AcceptEncoding("br")
        + Referer("https://developer.mozilla.org/testpage.html")
        + Connection(should_keep_alive=True)
        + UpgradeInsecureRequests()
        + IfModifiedSince("Mon, 18 Jul 2016 02:36:04 GMT")
        + IfNoneMatch("c561c68d0ba92bbeb8b0fff2a9199f722e3a621a")
        + CacheControl(max_age=0)
    )
     
    raw_headers = str(headers)
    raw_headers contient :

    Host: developer.mozilla.org
    User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
    Accept: text/html, application/xhtml+xml, application/xml; q="0.9", */*; q="0.8"
    Accept-Language: en-US, en; q="0.5"
    Accept-Encoding: gzip, deflate, br
    Referer: https://developer.mozilla.org/testpage.html
    Connection: keep-alive
    Upgrade-Insecure-Requests: 1
    If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
    If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
    Cache-Control: max-age="0"
    Pour connaître les cas plus avancées, je vous laisse les liens ci-dessous.

    Lien PyPi : https://pypi.org/project/kiss-headers/
    Lien GitHub : https://github.com/Ousret/kiss-headers

    Happy coding

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Directeur technique
    Inscrit en
    Octobre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 12
    Points : 35
    Points
    35
    Par défaut
    Re:

    Des nouvelles révisions ont été apportées pour plus de clarté et de simplicité.

Discussions similaires

  1. handles vers des objets
    Par oodbae_adriano dans le forum MATLAB
    Réponses: 3
    Dernier message: 10/08/2011, 15h51
  2. Transmission des objets avec une requête HTTP POST
    Par handsome01 dans le forum Langage
    Réponses: 4
    Dernier message: 31/03/2009, 16h07
  3. Transposition des données d'une table
    Par alex291184 dans le forum VBA Access
    Réponses: 10
    Dernier message: 06/09/2007, 16h36
  4. exporter des objets d'une base vers une autre
    Par RGShoop dans le forum Access
    Réponses: 3
    Dernier message: 07/09/2005, 11h52
  5. Réponses: 6
    Dernier message: 12/02/2004, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo