为任意URL调用cgi.FieldStorage

时间:2010-08-04 23:41:58

标签: python html http url

我想获得与任意网址相对应的字段值。 即给出“http://example.com/hello?q=1&b=1” 我想要一本字典{'q':1,'b':1}。我如何使用cgi.FieldStorage?

谢谢!

2 个答案:

答案 0 :(得分: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})

答案 1 :(得分:2)

您没有 - 您在2.5或更早版本中使用cgi.parse_qs,在2.6或更高版本中使用urlparse.parse_qs。 E.g:

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

请注意,值始终是字符串列表 - 您似乎希望它们是(“标量”)整数,但这实际上没有意义(您希望如何解析?q=bah ?!) - 如果你“知道”每个参数只有一个实例,那些实例的值总是数字字符串,那么很容易将解析返回的内容转换成你想要的形式,当然(更好的是,这个“已知”属性可以检查,如果实际上没有,则引发异常; - )。