サンプル
下記サンプルではサーバーAから別ドメインであるサーバーBにクロスドメイン通信する。<?php // Composerでインストールした各種ライブラリを読み込む(Guzzleもインストールされていること) require_once 'vendor/autoload.php'; // サーバーBへのURL $url = "http://example.com/server_side.php"; // サーバーBへ送信するPOSTデータ $data = ['id'=>888,'name'=>'dog']; $json = json_encode($data); // サーバーBとクロスドメイン通信を行う。 $client = new GuzzleHttp\Client(); $res = $client->request('POST', $url,['form_params'=>['key1'=>$json]]); // クロスドメイン通信のレスポンスを出力 echo $res->getStatusCode(); echo '<br>'; $body = $res->getBody(); $contents = $body->getContents(); var_dump($contents); ?>
<?php // クロスドメイン通信を許可する(本来なら認証チェックや、アクセス元のオリジン【ドメイン+ポート】に制限をかけるべき) header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: POST'); // デフォルトデータにPOSTデータをマージする。マージしたデータはJSONに変換して出力。 $data = ['id'=>1,'name'=>'cat','status'=>2]; if(!empty($_POST['key1'])){ $json=$_POST['key1']; $data2=json_decode($json,true);//JSONデコード $data = array_merge($data, $data2); } $json = json_encode($data);//JSONエンコード echo $json; ?>
string '{"id":888,"name":"dog","status":2}' (length=34)
サーバーA
// Composerでインストールしたライブラリ群をインクルードする(Guzzle3ライブラリも含まれる)
require_once '../vendor/autoload.php';
// 送信データ
$data = ['id'=>1200,'delete_flg'=>false, 'animal_name'=>'lion'];
$json = json_encode($data);
// クロスドメイン通信先URL(別ドメインのサイト)
$url = "http://amaraimusi.sakura.ne.jp/sample/php/guzzle3/cross_domain/test_serv_side.php";
// 通信先URLと送信データをセットして、クロスドメイン通信を開始する。
$client = new \Guzzle\Http\Client($url);
$request = $client->post($url,null,array('key1' => $json));
$res = $request->send();
// レスポンスをJSONとして受け取り出力する
$json = $res->json();
var_dump($json);
サーバーB
.
<?php
// クロスドメイン通信を許可する
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
$data = ['id'=>1,'animal_name'=>'cat','delete_flg'=>true];
if(!empty($_POST['key1'])){
$json=$_POST['key1'];
$data2=json_decode($json,true);//JSONデコード
$data = array_merge($data, $data2);
}
$json = json_encode($data);//JSONエンコード
echo $json;
?>
出力
array (size=3) 'id' => int 1200 'animal_name' => string 'lion' (length=4) 'delete_flg' => boolean false