關於PHP接收HTTP模擬POST傳JSON格式時$_POST為空的問題


編寫項目時需要將數據轉換成json格式的字符串,並通過post傳參傳給后台,但在后台接收數據時發現$_POST參數為空 

頭部為:

curl_setopt($ci, CURLOPT_HEADER, 0);
curl_setopt($ci, CURLOPT_HTTPHEADER,array('Content-Type: application/json; charset=utf-8','Content-Length:' . strlen($tmpdatastr)));

針對這個問題在網上查詢資料發現,僅在 Coentent-Type的值為application/x-www-data-urlencode和multipart/form-data時,php才會將http請求數據包中的數據填進$_POST中,

其他類型的Coentent-Type,php不能自動識別,會將相應的數據填入變量$HTTP_RAW_POST_DATA中.

所以可以使用兩種方法在這種情況下獲取數據

1.通過$HTTP_RAW_POST_DATA獲取

$post_data = $GLOBALS['HTTP_RAW_POST_DATA'];

但需要修改相應的php.ini指令

2.通過php://input獲取(建議使用這種方法 php://input數據總是和$HTTP_RAW_POST_DATA相同,但php://input更湊效且不需要修改php.ini)

$post_data = file_get_contents("php://input"); 

 

By Hgq


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM