HTMLでFORMタグを書いてSUBMITするのが本来のデータ送信方法なのだが、
最近は非同期やらWebSocketやらでサーバーサイドからデータをPOST送信する場面が増えてきた。
使う場面
- サーバーでBOTを作っている時など、定期的なバッチ処理で特定のサービスに対してOAuth認証を行う場合など
PHPプログラムをCLIで起動してそのまま直接POSTする場合。
- サーバー間の通信処理を自動で行う場合など、PHPのheader関数でURLをGETでたたくだけでは、物足りない場合。
- コマンドラインでサーバーにあるファイルを別サーバーに送信する。
サンプル
Googleの検索をPOSTしているだけですが、urlやクエリ内容を適時変更してお使いください。
send.php
<?php
//Google検索にPOSTする
//対象URL
$url = 'http://google.com/';
//初期定義
unset($data,$options);
$query = array("q"=>"test");
$data = http_build_query($query);
$options[http][method] ='POST';
$options[http][content]=http_build_query($data);
$res = file_get_contents($url."?".$q , false, stream_context_create($options));
echo $res;
実行
$ php send.php
解説
「http_build_query」関数は、連想配列をクエリ形式に変換してくれる便利な関数です。
URLを「file_get_contents」でURLアクセスすることで、POST送信を実現しています。
このやり方を発展させると、ファイル送信も可能になります。
ファイル送信をする場合
//ファイル読み込み
$handle = fopen($file, "r");
$data['file']['name'] = $file;
$data['file']['data'] = fread($handle, filesize($file));
fclose($handle);
こんな感じで、クエリに追記セットします。
0 件のコメント:
コメントを投稿