How to parse BaseHTTPRequestHandler.path
I'm using Python's BaseHTTPRequestHandler
. When I implement the do_GET method I find myself parsing by hand self.path
self.path
looks something like:
/?开发者_如何转开发parameter=value&other=some
How should I parse it in order to get a dict like
{'parameter': 'value', 'other':'some'}
Thanks,
Considering self.path could potentially be hierarchical, you should probably do something like the following :
import urlparse
o = urlparse.urlparse(self.path)
urlparse.parse_qs(o.query)
Use parse_qs
from the urlparse
module, but make sure you remove the "/?":
from urlparse import parse_qs
s = "/?parameter=value&other=some"
print parse_qs(s[2:]) # prints {'other': ['some'], 'parameter': ['value']}
Note that each parameter can have multiple values, so the returned dict maps each parameter name to a list of values.
In case somebody needs it for Python3:
import urllib.parse
s = "/?parameter=value&other=some"
print(urllib.parse.parse_qs(s[2:]))
>>> {'other': ['some'], 'parameter': ['value']}
urlparse
was renamed to urllib.parse
in Python3.
The cgi and urlparse modules have that: https://docs.python.org/2/library/urlparse.html#urlparse.parse_qs
You can do this easily with cgi.FieldStorage using the instance variables that BaseHTTPRequestHandler provides:
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={
'REQUEST_METHOD': 'POST',
'CONTENT_TYPE': self.headers['Content-Type'],
}
精彩评论