安卓用戶端通過http協議,採用post的方式,訪問php後台檔案並傳輸資料過來,資料是key1=value1&key2=value2方式的字串,但是後台採用$_POST方式卻不能擷取到資料。列印$_SERVER,發現數組裡的HTTP_DATA元素的值就是POST過來的原生資料,使用了$_SERVER['HTTP_DATA']來擷取值。PHP5.6版本以前可以使用$HTTP_RAW_POST_DATA來擷取原生POST資料,而5.6版本棄用此方法,使用更好的file_get_contents("php://input")來擷取原生資料。請問下為什麼$_POST用於通訊為什麼會擷取不到POST方式傳過來的值?
回複討論(解決方案)
因為缺少 Content-Type: application/x-www-form-urlencoded 頭
所以 php 不會當做 post 預解析
實際應用時應根據 $_SERVER['REQUEST_METHOD'] 的值來做相應的處理
也可以直接判斷 $_POST 是否為空白
當然,file_get_contents("php://input") 後 parse_str 就廢棄了 php 的與解析了
因為缺少 Content-Type: application/x-www-form-urlencoded 頭
所以 php 不會當做 post 預解析
實際應用時應根據 $_SERVER['REQUEST_METHOD'] 的值來做相應的處理
也可以直接判斷 $_POST 是否為空白
當然,file_get_contents("php://input") 後 parse_str 就廢棄了 php 的與解析了
恩,我就是通過file_get_contents("php://input") 後 parse_str的方式擷取值的,那麼Content-Type: application/x-www-form-urlencoded這個頭是安卓用戶端寫的時候加上嗎?
是的,以 post 方法傳遞資料時,這個頭是必須的
不知道你是用什麼工具做開發的,為什麼沒有自動給加上
是的,以 post 方法傳遞資料時,這個頭是必須的
不知道你是用什麼工具做開發的,為什麼沒有自動給加上
不知道,我做背景,用戶端是遊戲做的,好像是用的Eliscpe吧。