如何安全地评估Python中的urlencode-ed字典?

时间:2012-01-19 14:22:44

标签: python urldecode

我应该与在线服务进行沟通,该服务向我发送以下数据urlencoded:

data_to_process = {...}
args = {'args0': data_to_process, 'action': 'save'}

result = urllib2.urlopen(..., urllib.urlencode(args), ...)

感兴趣的主要数据存储在data_to_process字典中。我想找回原来的字典,它应该只包含字符串,数字和布尔值。你怎么能实现这个目标?

我试过

eval(dict_str,{'__builtins__': None})

False值失败(谁知道还有什么)。

感谢任何想法!

2 个答案:

答案 0 :(得分:3)

使用ast.literal_eval

>>> from ast import literal_eval
>>> test = repr({"ham": True, 42: "spam", "foo": "bar"})
>>> test
"{42: 'spam', 'foo': 'bar', 'ham': True}"
>>> literal_eval(test)
{42: 'spam', 'foo': 'bar', 'ham': True}

答案 1 :(得分:3)

您确定该服务没有向您发送JSON吗?在这种情况下,您可以使用内置的json.loads()函数解析它(自Python 2.6起)。