0

重複の可能性:
PHP php://input と $_POST の比較

Facebook リアルタイム更新 API を使用して、変更を購読しています。ドキュメントの状態:

サブスクリプションが成功すると、Facebook は (選択したフィールドまたは接続に) 変更があるたびにエンドポイントを呼び出します。更新ごとに、HTTP POST リクエストを作成します。

リクエストのコンテンツ タイプはapplication/jsonで、本文は 1 つ以上の変更を含む JSON エンコード文字列で構成されます。

https://developers.facebook.com/docs/reference/api/realtime/

いつも空だったPOSTed data useに何度もアクセスしようとしました。$_POSTしばらくグーグルで調べた後、この魔法の行を含むこのブログ投稿$post_body = file_get_contents('php://input');を見つけました: .

見たことないphp://input……なんだこれ?それは何をするためのものか?JSON文字列を含むファイルであると私が想定するものを作成するために、Facebookは彼らの側で何をしていますか? なぜ彼らはそれを送信するのではなく、これを行うのでしょう$_POSTか?

4

2 に答える 2

2

php:// inputは、生の入力本体のストリームラッパーです。これはphpによって自動的に解析されるため、コードを取得でき$_POSTます。そうでない場合-これは、予期しない形式であることを意味します。

Facebookの場合-PHPインタープリターが期待するものではないjson文字列のみを送信します(key=val&key2=val&...文字列であると期待し、代わりに取得{key: "val",...}します)。

そのため、手動で読み取って解析する必要があります。

于 2012-11-07T23:10:03.410 に答える
0

php:// inputは、リクエスト本文から生データを読み取ることができる読み取り専用ストリームです。POSTリクエストの場合、特別なphp.iniディレクティブに依存しないため、$ HTTP_RAW_POST_DATAの代わりにphp://inputを使用することをお勧めします。

参照 http://php.net/manual/en/wrappers.php.php

于 2012-11-07T23:10:42.503 に答える