调用cgi.FieldStorage处理任意URL

0 投票
2 回答
650 浏览
提问于 2025-04-16 02:20

我想要从一个任意的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})

撰写回答