私は、bodyタグに 'report'パラメータを指定してHTTP POSTメッセージを受け取るPHPスクリプトを実装しています。だからHTTP POSTレポート=。 私はこれをSimpleTest(PHPユニットテスト)でテストしています。私のPHPプログラムでURLエンコーディングが適切にjsonのエンコーディング/デコードの途中にあるようです
私はJSONを構築する:
$array = array("type" => "start"); // DEBUG
$report = json_encode($array);
私はPOSTを送信します。
$this->post(LOCAL_URL, array("report"=>$json));
(SimpleTestのからのWebTestCaseクラスのメソッドを呼び出します)。
SimpleTestのは、それがこの送信言う:
$report = $_POST['report'];
$logger->debug("Content of the report parameter: $report");
$json = json_decode($report);
デバッグ文は上記の私に与えます:
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
私は、次のような受信
Content of the report parameter: {\"type\":\"start\"}
をそして、私がデコードするとき、それができますエラー
Syntax error, malformed JSON
'application/x-www-form-urlencoded'コンテンツタイプはSimpleTestによって自動的に選択されます。 'application/json'に設定すると、PHPスクリプトにパラメータが表示されず、 'report'変数が見つかりません。 URLエンコーディングに何か問題があると思われますが、私はここでどのようにjsonを取得すべきかについて迷っています。
また、ここでの通常の練習は何ですか? json本体全体を送信しても、キー/値のアプローチを使用していますか?または、HTTP POSTの本体にjson文字列をダンプして、何とかそれを読み取ることができますか? (私は変数を指摘することなく実際にそれを読むことに成功しなかった)。
とにかく、問題がやや明確に述べられていることを願っています。 ありがとうございました。
ディーター
問題は確かに魔法の引用符で、明らかに私のバージョンのMAMPではデフォルトで有効になっています。 私は今それをkey/valueのペア(jsonが値)として送信し、content-typeを定義しないと、魅力的に機能します。 コンテンツタイプapplication/jsonを使用することはできませんが、これは私が明示的にしたくないRFCの種類のものに違反しているということです。 あなたの素晴らしい助けのために一束@johncartwrightと@hakreありがとう! – Dieter
ヒント:回答を「回答」として選択してください(例:ジョンの – hakre
@hakre:完了、チップありがとう:) – Dieter