通过http协议post方式接收xml数据解析不全

bijingjieshen

通过tcpdump抓包,真实传输数据如下所示

Pragma: no-cache
Content-Length: 334
Content-Type: text/xml

<xml><ToUserName><!></ToUserName>
<FromUserName><!></FromUserName>
<CreateTime>1513155527</CreateTime>
<MsgType><!></MsgType>
<Event><!></Event>
<EventKey><!></EventKey>
<MenuId>430813768</MenuId>
</xml>

但是通过var_dump($message)去打印,只有如下数据
array(1) {
=>
array(1) {
["CDATA=>
string(0) ""
}
}

是不是workerman的http解析xml只是解析一部分数据的原因?

5747 4 0
4个回答

walkor 打赏

因为post数据不是标准的key=value数据格式,所以$_POST得不到。
应该用 $GLOBALS去获取所有数据

  • 暂无评论
bijingjieshen

但是var_dump($GLOBALS)得到的是NULL
我查看了一下Http.php文件,

if ($_SERVER === 'POST') {
    if (isset($_SERVER) && $_SERVER === 'multipart/form-data') {
        self::parseUploadFiles($http_body, $http_post_boundary);
    } else {
        parse_str($http_body, $_POST);
        // $GLOBALS
        $GLOBALS = $GLOBALS = $http_body;
        var_dump($GLOBALS);
    }
}

打印了一下 var_dump($GLOBALS);,还是显示有数据的,为什么到Event.php中就变成NULL了呢?

  • 暂无评论
walkor 打赏

哦,gatewayWorker不支持http协议,手册说了

  • 暂无评论
bijingjieshen

我修改了Http.php的代码,加入xml解析函数parse,然后在Event.php中通过$message就可以获取到了

    if ($_SERVER === 'POST') {
        if (isset($_SERVER) && $_SERVER === 'multipart/form-data') {
            self::parseUploadFiles($http_body, $http_post_boundary);
        } elseif (isset($_SERVER) && $_SERVER === 'text/xml') {
            $_POST = parse($http_body);
            //var_dump($_POST);
        } else {
            parse_str($http_body, $_POST);
            // $GLOBALS
            $GLOBALS = $GLOBALS = $http_body;
        }
    }
  • 暂无评论
年代过于久远,无法发表回答
×
🔝