5

$HTTP_RAW_POST_DATAを使用して未加工の POST データをページに送信しようとしましたが、失敗し、未定義のインデックス通知が表示されました。

私は次のことを試みました:

curl_setopt($handle, CURLOPT_POSTFIELDS, 'Raw POST data');   // Doesn't seem to work at all.
curl_setopt($handle, CURLOPT_POSTFIELDS, array('Raw POST data'));   // 0 => Raw POST data

私はいくつかの調査を行い、リクエストでヘッダー ( Content-Type: text/plain ) を送信することを提案した人もいましたが、何の影響もないようでした。

この問題の解決策はありますか?

4

2 に答える 2

4

送信者/受信者サイクルの応答部分でエラーが発生します。

これは送信者(適切なリクエストを送信しない)の問題である可能性が非常に高いですが、受信側のPHPスクリプトの設定ミスが原因である可能性もあります。つまり、要求が正しい場合でも、受信者は利用できない可能性がHTTP_RAW_POST_DATAあります。

参照:http ://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

生のPOSTデータを含む$HTTP_RAW_POST_DATAを常に入力します。それ以外の場合、変数には認識されないMIMEタイプのデータのみが入力されます。ただし、生のPOSTデータにアクセスするための推奨される方法はphp://inputです。$ HTTP_RAW_POST_DATAは、enctype = "multipart/form-data"では使用できません。

したがって、最初に確認するの$HTTP_RAW_POST_DATAは、実際にデータが入力されているかどうかです。これには、上のページから次のいずれかが必要です。

  1. .ini変数always_populate_raw_post_dataはTrueであり、
  2. Content-Typeまたは、 POSTハンドラーが認識しないとPOSTが送信されます(「text / raw」を使用できる可能性があります)

この時点で、データを送信する正しい方法は次のようになります。

curl_setopt($handle, CURLOPT_POSTFIELDS, urlencode('Raw POST data'));

ただし、これらのデータを受信するための推奨される方法は、まったく依存せず$HTTP_RAW_POST_DATA、仮想ファイルの内容を読み取ることであることに注意してくださいphp://input

php:// inputは、リクエスト本文から生データを読み取ることができる読み取り専用ストリームです。POSTリクエストの場合、$HTTP_RAW_POST_DATA特別なphp.iniディレクティブに依存しないため、代わりにphp://inputを使用することをお勧めします。さらに、$ HTTP_RAW_POST_DATAがデフォルトで設定されていない場合は、always_populate_raw_post_dataをアクティブ化するよりもメモリ消費量が少ない可能性があります。

于 2012-10-27T10:15:31.767 に答える
1

何らかの奇妙な理由で、前述のヘッダーが修正されているようです。以前は機能していませんでしたが、なぜ今は機能するのかわかりません。

とにかく、知らない人のために、これはコードです:

curl_setopt($handle, CURLOPT_HTTPHEADER, array('Content-Type: text/plain'));
于 2012-10-27T12:15:19.537 に答える