我有一个python dict
x = {'id': 123, 'data': {'param1': 'hello', 'param2': 'world'}}
我试图让我的表单数据
id=123
data[param1]=hello
data[param2]=world
我无法将其作为json传递,因为接收它的API不会接受json对象
我试过像这样传递它
requests.post(url, data=x, headers={'content-type': 'application/x-www-form-urlencoded'})
请求结果显示表格数据,如下所示
id=123
data=param1
data=param2
有没有办法解决这个问题?
答案 0 :(得分:0)
您应该发布data = x
,而不是发布data=x['data']
。这应该可以解决您的问题。
requests.post(url, data=x['data'], headers={'content-type': 'application/x-www-form-urlencoded'})
或者更好的方法是从你的dict中删除data
键并直接创建dict为
x = {'param1': 'hello', 'param2': 'world'}
然后你可以张贴:
requests.post(url, data=x['data'], headers={'content-type': 'application/x-www-form-urlencoded'})
选择最适合你的方式..
希望这会有所帮助:)
答案 1 :(得分:-1)
你可以展平第一级:
x = {'data': {'param1': 'hello', 'param2': 'world'}}
x_flattened = {"{}[{}]".format(e, s) if type(: x[e][s] for e in x for s in x[e]}
requests.post(url, data=x_flattened)
修改 - 您在此期间为原始对象添加了更多信息。如果你想保留顶级奇异参数,你可以分两步完成(你可以在单个dict理解中做到这一点,但很快就会变得难看):
x_flattened = {}
for e in x:
if isinstance(x[e], (list, dict)):
x_flattened.update({"{}[{}]".format(e, s): x[e][s] for s in x[e]})
else:
x_flattened[e] = x[e]
requests.post(url, data=x_flattened)
答案 2 :(得分:-1)
也许你可以做得很好。我们来试试吧
x = {
'id': 123,
'data[param1]': 'hello',
'data[param2]': 'world',
}