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 à :
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
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")dans nos utilitaires.
Code : Sélectionner tout - Visualiser dans une fenêtre à part parse_charset_headers()
En utilisant la bibliothèque kiss-headers, vous abandonnez la syntaxe lourde et diminuez le risque inhérent.
A l'aide de la fonction parse_it, vous transformez vos headers en objets. Tout le parsing est déjà réalisé en amont.
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")
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.
raw_headers contient :
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)
Pour connaître les cas plus avancées, je vous laisse les liens ci-dessous.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"
Lien PyPi : https://pypi.org/project/kiss-headers/
Lien GitHub : https://github.com/Ousret/kiss-headers
Happy coding![]()
Partager