You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python向Express服务器发送POST请求,Node端未接收到JSON数据

Python POST请求到Express服务器接收为空?看这里!

我一眼就看出问题所在啦——你用requests.post的data参数传递了嵌套结构的数据,但Express默认解析的是表单编码格式,这种格式搞不定嵌套的数组/对象,所以服务器端拿到空对象。而Postman测试正常,是因为你在Postman里肯定是用JSON格式发的请求对吧?

问题根源

当你用data参数传递字典时,requests会把数据编码成application/x-www-form-urlencoded格式(也就是表单提交的格式),但这种格式只能处理扁平的键值对,没法处理chat字段里的数组嵌套结构。而Express的express.json()中间件只会解析Content-Type为application/json的请求,所以自然拿不到数据。

两种解决办法

方法1:直接用json参数(最推荐)

requests提供了json参数,会自动帮你把数据序列化成JSON字符串,同时设置正确的Content-Type: application/json请求头,一步到位:

import requests
print("started");
URL = "http://localhost:5000/api/chat"
PARAMS = {'ID':"99","otherID":"87",'chat':[{"senderName":"tom","text":"helloworld"}]}
# 把data换成json参数
r = requests.post(url=URL, json=PARAMS)
pastebin_url = r.text
print("The pastebin URL is:%s"%pastebin_url)

方法2:手动序列化+设置请求头

如果你想自己控制序列化过程,可以用json.dumps把字典转成JSON字符串,然后手动设置请求头:

import requests
import json
print("started");
URL = "http://localhost:5000/api/chat"
PARAMS = {'ID':"99","otherID":"87",'chat':[{"senderName":"tom","text":"helloworld"}]}
# 手动将数据序列化为JSON字符串
json_data = json.dumps(PARAMS)
# 设置Content-Type请求头,告诉服务器这是JSON数据
r = requests.post(url=URL, data=json_data, headers={'Content-Type': 'application/json'})
pastebin_url = r.text
print("The pastebin URL is:%s"%pastebin_url)

这样修改之后,Express服务器就能正确解析你的请求数据啦!

内容的提问来源于stack exchange,提问作者Alexander

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:52:17