关于使用5.10的webhook获取payload时的问题

关于我使用webhook使用http接口的方式来获取MQTT 消息发布 消息应答等事件的数据,之前我用4.3.8 版本的时候payload是正常的josn字符串 但是用了5.10 就变成了另外一种
111
这个是采用mqttX工具获取到的数据 是这种格式


这个是采用接口获取到的数据 ,访问方法用的也是文档上提供的POST方法 其他几个像clientid 这种都是正常的除了payload,请求头给的也是application/json,麻烦有知道的大佬给看看是什么问题呢

4.3 和 5.10 是不兼容的。

看不出来,你的规则怎么写的,还有更详细的信息么。

规则是没动的,直接就是通过webhook调用接口然后就是获取了 , 我看来4.3 和 5.10 是有点字段上面的区别,参数配置啥的基本上啥配置都没改

你图里面的数据结构是:
一个内嵌于 JSON 中的、格式错误的或自定义的字符串,其语法混合了 URL Query String 和 JSON 的特点。

不是标准的 json,你可以试一下发一个最简单的 json,然后调试看看。



我直接发了个最简单的json
还是这种格式,和之前的一样

我刚创建了一个简单的打印 request 的 http server,是正常的。
应该是你的 http server 做了什么额外的处理吧。可以再检查一下。


这是我拿postman对我的接口的测试

这是测试结果

这是我拿MQTTX做的测试

这是测试结果
下面是我的代码 很简单 没有多余的东西
$filePath = public_path() . ‘/test.txt’;
$request = request()->param();
file_put_contents($filePath, $request[‘payload’], FILE_APPEND);
$requestStr = json_encode($request, JSON_UNESCAPED_UNICODE);
if (file_put_contents($filePath, $requestStr, FILE_APPEND)) {
return ‘文件写入成功’;
} else {
return ‘文件写入失败’;
}
我没看出来那里有问题 我不知道的是现在这种情况是我的postman请求的时候给的raw格式不对呢,还是什么呢

我看不懂你这代码。你找个会的人帮你检查一下吧。

这有啥看不懂的,postman格式对不对,一样的请求为啥一个可以一个不可以

再说,你看不看懂我的代码有啥关系,你就看数据格式对不对就行了,一个webhook调用个接口,获取个数据,就这个情况一个可以一个不可以,也不知道复杂在那里,只是问你,为啥其他的字段都是对的 ,就payload出来格式是错的

有道理,怎么重现的。方便搞一个详细的步骤不
我自己本地试是正常的,想了解一下详细的复现过程。

我没有任何多余的操作,所以我才问你的,我只是安装了emqx,然后在控制台开启了webhook 然后就是使用接口访问


然后因为是内部请求 我通过了写文件的形式,写出来了刚才截图的内容,然后就这样没有其他的任何步骤 ,最开始你说我的json格式复杂 嵌套了什么 我就用最简单的发了也是一样,你说我的server有问题 我就用postman测试 也是可以解析的,现在唯独就是MQTT协议过来这个payload有问题 ,也不是不能解决,我只是之前使用过4.3 我知道payload之前是不需要做任何解析的,拿过来就可以用,现在是5.10 就是这种格式,所以我才咨询的,我的server代码就那么简单,我想修改能修改什么呢

所以,我应该怎么一步步的复现,有详细的步骤么。
就是那种你把 http server 代码放上来,一步步教我怎么使用 postman 来复现(我没用过,所以需要指导一下。)

你能提供一个关于http请求的时候的源数据格式吗

你也不要这么讲,我也不是第一次问问题,你也不是第一次解决我的问题,现在就http请求,你让我给你复现,我还要怎么给你复现

好的,如果你实在不知道应该如何复现,那我就把我如何测试的详细步骤写一下,你可以按照这个步骤对比排查一下(实在不知道你在说什么)

  1. 写一个简单的 http server,打印 request 并回复 200.
python3 simple_http_server.py

simple_http_server.py.zip (1.4 KB)
2. 配置 WEBHOOK


3. MQTTX客户端发送消息:

  1. 查看 http server 的控制台:
==================================================
请求方法: POST
请求路径: /
HTTP版本: HTTP/1.1
客户端地址: ('127.0.0.1', 57112)
请求头:
  content-length: 469
  host: 127.0.0.1:8000
  content-type: application/json
==================================================
POST数据: {"publish_received_at":1756263809751,"pub_props":{"Payload-Format-Indicator":0,"User-Property":{}},"qos":1,"topic":"test/1/100","clientid":"clientid","client_attrs":{},"peerhost":"172.100.239.1","payload":"{\n  \"test\": 1\n}","username":"emqx_u1","event":"message.publish","metadata":{"rule_id":"test_WH_D"},"peername":"172.100.239.1:63328","timestamp":1756263809752,"node":"emqx@127.0.0.1","id":"00063D5008831A7AF445000017C00003","flags":{"retain":false,"dup":false}}
127.0.0.1 - - [27/Aug/2025 03:05:06] "POST / HTTP/1.1" 200 -