python-requests - 通过带有方括号名称的POST表单发送不起作用

时间:2014-05-06 09:25:36

标签: python http python-requests

我试图通过HTML表单将test [key1] = val1和test [key2] = val42发送到服务器。
相应的HTML将是:

<input type="text" name="test[key1]" value="val1" />
<input type="text" name="test[key2]" value="val42" />

(顺便说一下,我想知道这种形式的正确名称。)

>>> import requests, json
>>> params = { 'test' : { 'key1' : 'val1', 'key2' : 'val42' } }
>>> r = requests.post('http://httpbin.org/post', data=params)
>>> json.loads(r.text)['form']
{u'test': [u'key2', u'key1']}

帖子数据已经变平,我们得到了键但丢失了值val1和val42

2 个答案:

答案 0 :(得分:5)

我认为python-requests将使用嵌入式键自动处理params json,但事实并非如此。

您需要使用方括号编写params

>>> params = { 'test[key1]' : 'val1', 'test[key2]' : 'val42' }
>>> r = requests.post('http://httpbin.org/post', data=params)
>>> json.loads(r.text)['form']
{u'test[key1]': u'val1', u'test[key2]': u'val42'}

希望这会对某人有所帮助。

答案 1 :(得分:0)

默认情况下,HTML表单无法序列化,因为它们不支持嵌套。使用像formencode这样的库,尤其是variabledecode模块,将表单数据序列化/反序列化为json。

https://github.com/formencode/formencode/blob/master/formencode/variabledecode.py