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

如何通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:06:03