我想用python和请求库发送请求。我已经在web浏览器检查器中检查了此请求,表单数据如下所示:
data[foo]: bar
data[numbers][]: 1
data[numbers][]: 2
data[numbers][]: 3
data[numbers][]: 4
data[numbers][]: 5
csrf_hash: 12345
这是我的代码:
payload = {'data[foo]': 'bar', 'csrf_hash': 12345,
'data[numbers]': [1, 2, 3, 4, 5]}
r = s.post('https://www.foo.com/bar/', payload)
它不起作用。由于无效的post数据,我收到错误
发布于 2018-06-23 17:02:04
我用下面的代码解决了这个问题:
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)
它不是很漂亮,但很有效。
发布于 2018-06-19 07:07:26
问题在于您试图将数据发送到https://www.foo.com/bar/的方式
我建议您尝试使用json
,而不是使用data
发送,因此您的最终代码应该如下所示
payload = {'data[foo]': 'bar', 'csrf_hash': 12345,
'data[numbers]': [1, 2, 3, 4, 5]}
r = s.post('https://www.foo.com/bar/', json=payload)
希望这能有所帮助。
发布于 2019-02-16 03:52:24
我需要一种更动态/适应性更强的方式来处理它。我的想法是这样的:
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[][]
,但可以通过一些小的调整来处理。
https://stackoverflow.com/questions/50917419
复制相似问题