Как разобрать BaseHTTPRequestHandler.path
Я использую Python BaseHTTPRequestHandler
. Когда я реализую метод do_GET, я нахожусь синтаксический анализ вручную self.path
self.path
выглядит примерно так:
/?parameter=value&other=some
Как я должен разбирать его, чтобы получить dict, например
{'parameter': 'value', 'other':'some'}
Спасибо,
Ответы
Ответ 1
Используйте parse_qs
из модуля urlparse
, но обязательно удалите "/?":
from urlparse import parse_qs
s = "/?parameter=value&other=some"
print parse_qs(s[2:]) # prints {'other': ['some'], 'parameter': ['value']}
Обратите внимание, что каждый параметр может иметь несколько значений, поэтому возвращаемый dict отображает каждое имя параметра в список значений.
Ответ 2
Учитывая, что self.path потенциально может быть иерархическим, вы должны, вероятно, сделать что-то вроде следующего:
import urlparse
o = urlparse.urlparse(self.path)
urlparse.parse_qs(o.query)
Ответ 3
Если кому-то это нужно для Python3:
import urllib.parse
s = "/?parameter=value&other=some"
print(urllib.parse.parse_qs(s[2:]))
>>> {'other': ['some'], 'parameter': ['value']}
urlparse
был переименован в urllib.parse
в Python3.
Ответ 4
Модули cgi и urlparse имеют следующее: https://docs.python.org/2/library/urlparse.html#urlparse.parse_qs