web-dev-qa-db-ja.com

JSON POST in PHP

Webhookのエンドポイントとして登録されているスクリプトを書いています。すべてのリクエストのヘッダーをサーバーログに書き込んでいるので、正常に登録されたことを知っています。サンプルを次に示します。

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

登録したAPIはJSONオブジェクトをスクリプトにPOSTすることであり、PHPを使用してそのオブジェクトを解析したいと思います。リクエストヘッダーからわかるように、解析されるのを待っている素敵で大きな太ったJSONオブジェクトがあります。簡単そうに見えますが、そうではありません。

最初は_$_POST['json']_または単に_$_POST_を使用しようとしましたが、データが配列内にないため、そのようにアクセスする方法が本当にわかりませんでした。

私はfile_get_contents('php://input')fopen('php://input', 'r')を使用してjson_decode()ありとなしで試してみましたが、運はありません。 http_get_request_body()を使用することはできません。使用しているサーバーにPECLがなく、それが私の制御不能であるためです。

POSTされたJSONオブジェクトとやり取りする他の方法はありますか?ありがとう!

47
Hartley Brody

入力してくれた他の人に感謝します。私はちょうど必要だったことが判明

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

json_decodeの2番目のパラメーターは、オブジェクトを配列として返しました。

これが誰かの助けになることを願っています!

136
Hartley Brody

次の場合でも動作します。

$inputJSON = file_get_contents('php://input');

引き続き$ _POSTを使用する場合は、データをFormDataとして送信します

var fd = new FormData();
fd.append('key', 'value');
return axios.post('url', fd)
0