如何解析BaseHTTPRequestHandler.path

33 投票
5 回答
30421 浏览
提问于 2025-04-16 04:34

我正在使用Python的BaseHTTPRequestHandler。当我实现do_GET方法时,我发现自己需要手动解析self.path

self.path的内容大概是这样的:

/?parameter=value&other=some

我应该怎么解析它,才能得到一个像这样的字典:

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

谢谢,

5 个回答

30

如果有人需要在Python3中使用这个:

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

urlparse 在Python3中被改名为 urllib.parse

38

在Python 2中,考虑到self.path可能是分层的,你可能应该做类似下面的事情:

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

使用 parse_qs 这个函数,它在 urlparse 模块里。不过要记得先把 "/?" 去掉:

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

要注意的是,每个参数可以有多个值,所以返回的字典会把每个参数名对应到一个值的列表。

撰写回答