首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python请求- Post索引数组

Python请求- Post索引数组
EN

Stack Overflow用户
提问于 2018-06-19 05:02:38
回答 4查看 3.3K关注 0票数 2

我想用python和请求库发送请求。我已经在web浏览器检查器中检查了此请求,表单数据如下所示:

代码语言:javascript
复制
data[foo]: bar
data[numbers][]: 1
data[numbers][]: 2
data[numbers][]: 3
data[numbers][]: 4
data[numbers][]: 5
csrf_hash: 12345

这是我的代码:

代码语言:javascript
复制
payload = {'data[foo]': 'bar', 'csrf_hash': 12345,
         'data[numbers]': [1, 2, 3, 4, 5]}
r = s.post('https://www.foo.com/bar/', payload)

它不起作用。由于无效的post数据,我收到错误

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-06-23 17:02:04

我用下面的代码解决了这个问题:

代码语言:javascript
复制
payload = {'data[foo]': 'bar', 'csrf_hash': 12345,
     'data[numbers][0]': 1, 'data[numbers][1]': 2, 'data[numbers][2]': 3, 'data[numbers][3]': 4, 'data[numbers][4]': 5}
r = s.post('https://www.foo.com/bar/', payload)

它不是很漂亮,但很有效。

票数 0
EN

Stack Overflow用户

发布于 2018-06-19 07:07:26

问题在于您试图将数据发送到https://www.foo.com/bar/的方式

我建议您尝试使用json,而不是使用data发送,因此您的最终代码应该如下所示

代码语言:javascript
复制
payload = {'data[foo]': 'bar', 'csrf_hash': 12345,
         'data[numbers]': [1, 2, 3, 4, 5]}
r = s.post('https://www.foo.com/bar/', json=payload)

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2019-02-16 03:52:24

我需要一种更动态/适应性更强的方式来处理它。我的想法是这样的:

代码语言:javascript
复制
def multi_dict_to_php_dict(md):
    result = {}
    for key in md.keys():
        if '[]' in key:  # Key is an array, we need to make the array keys unique.
            keyformat = '[%d]'.join(key.split('[]'))
            for idx, val in enumerate(md.getlist(key)):
                result[keyformat % idx] = val
        else:  # Key is just a value, include it in the new result.
            result[key] = md[key]
    return result

这支持像number[]这样的东西,也支持group[][name] (我遇到的)或item[children][]。它(在目前的形式下)不能处理arrayofarrays[][],但可以通过一些小的调整来处理。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50917419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档