2021/12/19
前回、PHPでPOST送信を行いました。
ただ、実際のWeb APIでは送信データはJSON形式でやり取りすることが多いです。
なので、今回はJSON形式でPOST送信してみます。
サンプルソースコード
データを送信する側(send.php)
<?php
// 送信データ
$data = array(
"key1" => "value1",
"key2" => "value2"
);
// JSON形式に変換
$data = json_encode($data);
// ストリームコンテキストのオプションを作成
$options = array(
// HTTPコンテキストオプションをセット
'http' => array(
'method'=> 'POST',
'header'=> 'Content-type: application/json; charset=UTF-8', //JSON形式で表示
'content' => $data
)
);
// ストリームコンテキストの作成
$context = stream_context_create($options);
// POST送信
$contents = file_get_contents('http://localhost/api/reception.php', false, $context);
// reception.php のレスポンスを表示
echo $contents;
データを受け取る側(reception.php)
<?php
// POST の生データの読み込む
$json_string = file_get_contents('php://input');
// JSON形式で表示
echo "JSON形式:".$json_string."
";
echo "PHP変数に変換:";
// JSON エンコードされた文字列を PHP の変数に変換
$contents = json_decode($json_string);
// reception.php のレスポンスを表示
print_r($contents);
実行結果
解説
json_encode関数について
PHP形式のデータ形式をJSON形式に変換する場合は json_encode関数を使います。
// JSON形式に変換
$data = json_encode($data);
JSONテキストのMIMEタイプは application/json と定められています。
なので、ストリームコンテキストでヘッダー情報を以下のように設定します。
'header'=> 'Content-type: application/json; charset=UTF-8',
JSONデータの受信処理
JSONデータの受信処理です。file_get_contents関数で送信データを受信します。JSON の場合はここがポイントになります。
$json_string = file_get_contents('php://input');
json_decode()関数について
PHPでは、JSONデータをそのまま扱うことができません。実践では json_decode関数を利用して、JSONデータを配列に変換して処理をします。
$array_data = json_decode($json_string);
json_decode()関数の第二引数に true を設定すると連想配列になります。
// JSONを連想配列に変換
$arr = json_decode($json, true);
// 連想配列へのアクセス方法
echo $arr['res']['blogData']['id'];
json_decode関数の第二引数に何も指定をしない場合は stdClass に変換されます。
// JSONを stdClass に変換
$arr = json_decode($json);
// stdClassのメンバへアクセス方法
echo $arr->res->blogData->id;
ポイント
stdClass とは?
プロパティやメソッドがなく、ほとんど空っぽのクラスみたいなもの。一旦インスタンスを生成すると存在しないプロパティに自由にアクセスできるようになります。
以上です。
PHP おススメ教材(by Udemy)
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。