我试图通过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
答案 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