如何通过Python向Laravel站点发送POST请求提交字典数据
实现步骤
1. 安装依赖库
首先在树莓派终端执行以下命令安装requests:pip3 install requests
2. 核心逻辑说明
- 我们会通过requests库的POST方法,将读取文件生成的字典序列化为JSON格式,发送到Laravel站点的接口
- 建议Laravel侧使用api路由(定义在
routes/api.php文件下),这类路由默认不需要校验CSRF令牌,更适合硬件设备对接场景 - 代码中加入异常捕获逻辑,避免网络波动导致脚本直接崩溃
3. 修改后的完整Python代码
import requests mac_dict = {} def readFile(): with open("/home/pi/Desktop/Progetti SIoTD/device.txt", "r") as file: for i in file: line, *lines = i.split() if line in mac_dict: mac_dict[line] += lines else: mac_dict[line] = lines print(mac_dict) print("\n") return mac_dict def getValues(dict, mac): s = 0 rssi_val = [] for key in dict: if key == mac: k = dict.get(mac) for i in range(len(k)): if i % 2 == 0: rssi = k[i] rssi = int(rssi) print(rssi) rssi_val.append(rssi) else: k_v = k[i] print(k_v) for i in range(len(rssi_val)): s += rssi_val[i] average = s / len(rssi_val) return average # 新增:发送数据到Laravel接口的函数 def post_to_laravel(data): # 替换为你自己的Laravel接口实际地址 api_url = "http://你的Laravel站点IP或域名/api/bluetooth-data" headers = { "Content-Type": "application/json" } try: response = requests.post(api_url, json=data, headers=headers, timeout=10) # 打印响应信息方便调试 print("请求状态码:", response.status_code) print("接口返回内容:", response.json()) if response.status_code == 200: print("数据发送成功") else: print("数据发送失败,接口返回异常") except Exception as e: print("请求出错:", str(e)) if __name__ == "__main__": mac_dict = readFile() # 调用发送函数 post_to_laravel(mac_dict) # 原有逻辑保留 getValues(mac_dict, 'C4:A5:DF:24:05:7E')
4. Laravel侧对接示例
路由配置(routes/api.php)
use App\Http\Controllers\BluetoothDataController; Route::post('/bluetooth-data', [BluetoothDataController::class, 'store']);
控制器代码(app/Http/Controllers/BluetoothDataController.php)
namespace App\Http\Controllers; use Illuminate\Http\Request; class BluetoothDataController extends Controller { public function store(Request $request) { // 获取Python端提交的所有蓝牙数据 $bluetoothData = $request->all(); // 可选:添加数据验证逻辑 $validated = $request->validate([ '*' => 'array', // 验证每个键对应的值为数组 ]); // 后续业务逻辑:数据存库、计算处理等 return response()->json(['status' => 'success', 'msg' => '数据接收成功']); } }
常见问题排查
- 接口地址要填Laravel站点的实际可访问地址,不要用localhost,要带上端口(如果非80/443端口)
- 如果出现跨域错误,需要在Laravel配置CORS规则,允许树莓派的IP访问
- 如果你坚持使用web路由,需要在Laravel的
VerifyCsrfToken中间件的$except数组中加入对应的路由,跳过CSRF校验
内容的提问来源于stack exchange,提问作者user11989615
相关产品推荐
相关产品推荐

