国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

Workerman3.4.2在3.4.0版本上改動了HTTP協(xié)議,導(dǎo)致POST請求收不到內(nèi)容

moubai

之前業(yè)務(wù)是建立在3.4.0版本上,客戶端采用POST發(fā)送JSON數(shù)據(jù),接收正常,現(xiàn)更換為3.4.2版本后,業(yè)務(wù)代碼不變,但打印data數(shù)據(jù)段,發(fā)現(xiàn)content-type為application/json時,post節(jié)點(diǎn)一直為空,為application/x-www-form-urlencoded時才會有數(shù)據(jù)。

對比兩個版本中的Http.php,發(fā)現(xiàn)3.4.2改動了一處。
原3.4.0版本:

// Parse $_POST.
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;
    }
}

現(xiàn)3.4.2版本:

// Parse $_POST.
if ($_SERVER === 'POST') {
    if (isset($_SERVER)) {
        switch ($_SERVER) {
            case 'multipart/form-data':
                self::parseUploadFiles($http_body, $http_post_boundary);
                break;
            case 'application/x-www-form-urlencoded':
                parse_str($http_body, $_POST);
                break;
            default:
                // $GLOBALS
                $GLOBALS = $GLOBALS = $http_body;
        }
    } else {
        // $GLOBALS
        $GLOBALS = $GLOBALS = $http_body;
    }
}

嘗試在default段加入:parse_str($http_body, $_POST); 業(yè)務(wù)正常。

3738 2 0
2個回答

walkor 打賞

打印下 $GLOBALS ,我這邊看看是什么數(shù)據(jù)

  • moubai 2017-06-15

    打印出的是JSON數(shù)據(jù)體:string(33) "{"type":"ad_list","sessionid":""}"

walkor 打賞

https://github.com/walkor/Workerman/pull/154
這里有個關(guān)于這個的issue
如果不是application/x-www-form-urlencoded的,不應(yīng)該用parse_str。
content-type為application/json 時,應(yīng)該是傳遞的json數(shù)據(jù),不是urlencoded的數(shù)據(jù)

  • moubai 2017-06-15

    業(yè)務(wù)這邊修改下接收數(shù)據(jù)的方式就可以了,現(xiàn)在3.4.2跟Apache上處理方式一樣了。也貼下原先3.4.0的接收方式,現(xiàn)在這種更好:
    // 收到客戶端發(fā)來的消息
    //$data_json = json_decode(array_keys($data['post'], 0)[0], true);
    $data_json = json_decode($GLOBALS['HTTP_RAW_REQUEST_DATA'], true);

  • walkor 2017-06-16

    好的

年代過于久遠(yuǎn),無法發(fā)表回答
??