Python 请求 dict 作为表单数据

Alo*_*lon 5 python python-requests

我有一个 python 字典

\n\n
x = {'id': 123, 'data': {'param1': 'hello', 'param2': 'world'}}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我试图让我的表单数据成为

\n\n
id=123\ndata[param1]=hello\ndata[param2]=world\n
Run Code Online (Sandbox Code Playgroud)\n\n

无法将其作为 json 传递,因为接收它的 API 不接受 json 对象

\n\n

我尝试过像这样传递它

\n\n
requests\xe2\x80\x8b.post(url, data=x, headers={'content-type': 'application/x-www-form-urlencoded'})\n
Run Code Online (Sandbox Code Playgroud)\n\n

请求发出时,表单数据如下所示

\n\n
id=123\ndata=param1\ndata=param2\n
Run Code Online (Sandbox Code Playgroud)\n\n

有办法解决这个问题吗?

\n

cod*_*adi 0

你不应该发帖,而data = x应该发帖data=x['data']。这应该可以解决你的问题。

\n\n
requests\xe2\x80\x8b.post(url, data=x['data'], headers={'content-type': 'application/x-www-form-urlencoded'})\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者更好的方法是data从你的字典中删除密钥并直接创建字典作为

\n\n
x = {'param1': 'hello', 'param2': 'world'}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后你可以像这样发帖:

\n\n
requests\xe2\x80\x8b.post(url, data=x['data'], headers={'content-type': 'application/x-www-form-urlencoded'})\n
Run Code Online (Sandbox Code Playgroud)\n\n

选择最适合您的..

\n\n

希望这可以帮助 :)

\n