2011-08-13 21 views
35

從JSON POST讀取HTTP請求的身體我正在寫被註冊爲一個網絡掛接端點的腳本。我知道它已成功註冊,因爲我正在將每個請求的標題寫入我的服務器日誌。這裏有一個例子:問題在PHP

Content-Type: text/xml; charset=UTF-8 
User-Agent: Jakarta Commons-HttpClient/3.1 
Host: =={obfuscated}== 
Content-Length: 1918 

,我已經註冊的API是POST-ING JSON對象到我的劇本,我想用PHP來解析該對象。正如你從請求頭中可以看到的那樣,有一個很大的胖胖的JSON對象正在等待被解析。這看起來很直接,但並沒有。

起初,我嘗試使用$_POST['json']或只是$_POST但由於數據不在數組中,我不確定如何訪問它。

我試過使用file_get_contents('php://input')fopen('php://input', 'r')有和沒有json_decode()但沒有運氣。我不能使用http_get_request_body(),因爲我所在的服務器沒有PECL,而且這是我無法控制的。

是否有任何其他方式使用POST-ED JSON對象,我缺少互動?謝謝!

+1

JSON正文的內容類型是錯誤的,因此它可能已被刪除。但是嘗試['$ HTTP_RAW_POST_DATA'(http://php.net/manual/en/reserved.variables.httprawpostdata.php) – mario

+0

@mario我以前見過這個變量,但不知道如何使用它。 json_decode($ HTTP_RAW_POST_DATA);沒有工作 –

+0

請參閱手冊頁。它需要首先在'php.ini'中啓用。你還嘗試過正確的MIME類型嗎? mod_security有任何機會嗎? – mario

回答

102

感謝別人爲輸入。事實證明,我只需要

$inputJSON = file_get_contents('php://input'); 
$input = json_decode($inputJSON, TRUE); //convert JSON into array 

其中json_decode第二參數返回的對象作爲一個數組。

希望這可以幫助別人!

+0

這是有幫助的,它適用於我 –

+5

也適用於我。只是不能相信JSON數據不被PHP識別。我知道它畢竟是原始數據類型,但仍然是... –

+3

'$ _POST'只有在接收到具有'application/x-www-form-urlencoded'或'multipart/form-數據** **內容類型**標題。由於PHP請求主體的流屬性,您將以'$ _POST' ***或***輸入流獲取數據,而不是兩者。 –