2010-08-18 3 views
1

J'écris un serveur web asynchrone expérimental. Je m'interroge sur la façon standard/'meilleure' de décoder les requêtes HTTP en python? Fondamentalement ce que la lecture de la socket me donne est une représentation en octets des données brutes de la demande entrante;comment décoder les en-têtes de requête HTTP et le corps dans Python 3?

comment puis-je les transformer en types de données standard comme des dictionnaires, des listes de valeurs, etc. y a-t-il un bon tutoriel général sur la façon de le faire et sur ce qu'il faut surveiller (en particulier en ce qui concerne les encodages et les spécificités du navigateur)?

Répondre

0

Voir

20.10.4. Objets HTTPMessage

Une instance http.client.HTTPMessage contient les en-têtes d'une réponse HTTP. Il est implémenté en utilisant la classe email.message.Message.

http://docs.python.org/py3k/library/http.client.html#httpmessage-objects

Vous devriez être en mesure d'utiliser le HTTPMessage en tant que classe autonome sans invoquer urllib (ou quel que soit l'équivalent Python 3).

0

Ne pas utiliser avec des douilles; abstrait! Essayez httplib2. C'est une bibliothèque HTTP complète pour Python 2 et 3, et elle est très intuitive, bien que vous deviez la télécharger et l'installer. Lisez son usage example pour une introduction rapide.

Dive Into Python 3 comprend un très bon chapter on installing and using httplib2, et pourquoi c'est mieux que d'autres alternatives, y compris la bibliothèque standard; Je vous recommande de lire cela.

1

Cela a fonctionné pour moi:

import StringIO, httplib 

ucode_data = unicode(your_raw_data ,"utf-8") 
str = StringIO.StringIO(ucode_data) 
http_header = httplib.HTTPMessage(str,0) 
http_header.readheaders() 

print http_header.__dict__ 

mais il ne décode pas la demande (par exemple, GET /index.html HTTP/1.2) - il décode le reste pour vous si

Questions connexes