python-requests - 带方括号名称的POST表单发送失败
我想通过一个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
HTML表单默认情况下不能被序列化,因为它们不支持嵌套结构。你可以使用一个叫做 formencode
的库,特别是里面的 variabledecode
模块,来把表单数据转换成json格式,或者从json格式还原成表单数据。
https://github.com/formencode/formencode/blob/master/formencode/variabledecode.py
7
我原以为 python-requests 会自动处理带有嵌套键的参数 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'}
希望这能帮助到某个人。