「レポート」パラメーターに関連付けられた JSON 文字列を本文に含む HTTP POST メッセージを受信する PHP スクリプトを実装しています。したがって、HTTP POST レポート =. これを SimpleTest (PHP Unit Testing) でテストしています。
私はjsonを構築します:
$array = array("type" => "start"); // DEBUG
$report = json_encode($array);
私はポストを送ります:
$this->post(LOCAL_URL, array("report"=>$json));
(SimpleTest から WebTestCase クラスのメソッドを呼び出します)。
SimpleTest は、これを送信すると言います:
POST /Receiver/web/report.php HTTP/1.0
Host: localhost:8888
Connection: close
Content-Length: 37
Content-Type: application/x-www-form-urlencoded
report=%7B%22type%22%3A%22start%22%7D
私はそのように受け取ります:
$report = $_POST['report'];
$logger->debug("Content of the report parameter: $report");
$json = json_decode($report);
上記のデバッグ ステートメントから、次のことがわかります。
Content of the report parameter: {\"type\":\"start\"}
そして、デコードすると、エラーが発生します
Syntax error, malformed JSON
「application/x-www-form-urlencoded」コンテンツ タイプは、SimpleTest によって自動的に選択されます。「application/json」に設定すると、PHP スクリプトはパラメーターを認識しないため、「report」変数を見つけることができません。URLエンコーディングで何か問題が発生していると思いますが、jsonをどのように取得する必要があるかについて、ここで迷っています。
また、ここでの通常の練習は何ですか?JSON本体全体を送信するだけでも、キー/値アプローチを使用しますか? または、JSON 文字列を HTTP POST の本文にダンプして、何らかの方法で読み取ることはできますか? (参照する変数がなければ、実際にそれを読み取ることに成功しませんでした)。
とにかく、問題がある程度明確に述べられていることを願っています。事前にたくさんありがとう。
ディーター