调用cgi.FieldStorage处理任意URL
我想要从一个任意的URL中获取字段值。比如,给定这个链接 "http://example.com/hello?q=1&b=1",我想得到一个字典 {'q':1, 'b':1}。我该怎么用 cgi.FieldStorage 来实现呢?
谢谢!
2 个回答
2
你不需要这样做——在Python 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
呢?)——如果你“知道”每个参数只有一个实例,并且这些实例的值总是数字字符串,那么当然可以很容易地把解析结果转换成你想要的形式(更好的是,这个“已知”的特性可以被检查,如果不符合就抛出异常;-)。
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})