之前業(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ù)正常。
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ù)