创建HTTP桥接,php server接收到请求,但是参数为空

转发"$events/client_connected"消息到php的HTTP服务。
规则的SQL编辑器内容如下:
SELECT
*
FROM
“$events/client_connected”

消息头配置如图所示,同样的消息头,在接入认证时配置有效。

请求体配置为空。

emqx 版本号: v5.1.5

查看nginx access_log日志如下:
8.209.110.15 - - [19/Nov/2023:22:28:13 +0100] “POST /index.php/Api/PrintReportApi/connStatus HTTP/1.1” 200 5 “-” “-”

数据字节数只有5,显然"$events/client_connected"的参数并没有传递过来。

用postman发消息到这个http地址。能正常接受到。查看nginx的access_log日志如下
8.209.110.15 - - [19/Nov/2023:22:28:13 +0100] “POST /index.php/Api/PublicApi/mqttVerify HTTP/1.1” 200 29 “-” “-”
有29字节。

请帮忙看看是否是EMQX配置问题,百思不解。

看下完整的 HTTP Bridge 和 规则的配置?

不知道哪儿找到配置文件,只能界面截图了。 如下:




甚至在桥接中,写入了固定的请求体,数据也无法通过http传递

nginx的access.log显示没有数据传递(5个字节):
8.209.110.15 - - [20/Nov/2023:07:40:27 +0100] “POST /index.php/Api/PrintReportApi/report HTTP/1.1” 200 5 “-” “-”

看起来有点奇怪…看配置是对的。有试过最新的 v5.3.x 么,看是否有这个问题?

问题找出来了,是php 应用的问题。参数传递到了php应用。
php传统应用I()方法无法获取参数,需要调用json_decode(file_get_contents(‘php://input’), true) 方法获取post消息。

1 个赞