【问题标题】:python-requests - Sending via POST form with square brackets names doesn't workpython-requests - 通过带有方括号名称的 POST 表单发送不起作用
【发布时间】:2014-05-06 09:25:36
【问题描述】:

我正在尝试通过 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']}

post 数据已被展平,我们得到了键但丢失了值 val1 和 val42

【问题讨论】:

    标签: python http python-requests


    【解决方案1】:

    我认为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'}
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2018-04-21
        • 2016-03-11
        • 1970-01-01
        • 2015-02-13
        相关资源
        最近更新 更多