2010-08-04 48 views

回答

3

可以使用向里urlparse做

from urlparse import urlparse, parse_qs 
qs = urlparse("http://example.com/hello?q=1&b=1").query 
parse_qs(qs) 

如果必须使用FieldStorage

cgi.FieldStorage(environ={'REQUEST_METHOD':'GET', 'QUERY_STRING':qs}) 
+0

谢谢!这*完全是我需要的。 :-) – Evgeny 2010-08-05 02:47:03

2

您不 - 您在2.5或更早版本中使用cgi.parse_qs,2.6或更高版本中使用urlparse.parse_qs。例如:

>>> import urlparse 
>>> pr = urlparse.urlparse("http://example.com/hello?q=1&b=1") 
>>> urlparse.parse_qs(pr.query) 
{'q': ['1'], 'b': ['1']} 

注意,值总是要串的名单 - 你似乎希望他们(“标”)的整数,但真的是没有意义的(你会怎么指望?q=bah到被解析?!) - 如果你“知道”每个参数只有一个实例,并且这些实例的值总是数字串,那么很容易将解析返回到你想要的形式(当然更好,这个“已知”属性可以是,检查,如果它实际上没有保留,则引发异常;-)。

+0

我可能会用的FieldStorage坚持,如果我改变了主意,并切换到后处理。但是了解另一种方法是很好的。谢谢! – Evgeny 2010-08-05 02:48:04