2010-09-24 7 views
19

J'utilise Python BaseHTTPRequestHandler. Lorsque je mets en œuvre la méthode do_GET je trouve l'analyse moi-même à la main self.pathComment analyser BaseHTTPRequestHandler.path

self.path ressemble à quelque chose comme:

/?parameter=value&other=some 

Comment dois-je l'analyser afin d'obtenir un dict comme

{'parameter': 'value', 'other':'some'} 

Merci,

+0

duplication possible de [parse chaîne de requête avec urllib dans Python 2.4] (http://stackoverflow.com/questions/1769625/parse-query-string-with-urllib-in-python-2-4) – katrielalex

Répondre

17

Utilisation parse_qs à partir du module urlparse, mais assurez-vous de retirer le « /? »:

from urlparse import parse_qs 
s = "/?parameter=value&other=some" 
print parse_qs(s[2:]) # prints {'other': ['some'], 'parameter': ['value']} 

Notez que chaque paramètre peut avoir plusieurs valeurs, de sorte que le dict retour cartes nom de chaque paramètre à une liste de valeurs .

23

Considérant self.path pourrait être hiérarchique, vous devriez probablement faire quelque chose comme ce qui suit:

import urlparse 
o = urlparse.urlparse(self.path) 
urlparse.parse_qs(o.query) 
4

Dans le cas où quelqu'un il a besoin pour python3:

import urllib 
s = "/?parameter=value&other=some" 
print(urllib.parse.parse_qs(s[2:])) 
>>> {'other': ['some'], 'parameter': ['value']} 

urlparse a été rebaptisée à urllib.parse en Python3.