[PHP] Webページではなく、サーバープログラムから直接POST送信する方法

2015年10月20日

PHP テクノロジー プログラミング

HTMLでFORMタグを書いてSUBMITするのが本来のデータ送信方法なのだが、 最近は非同期やらWebSocketやらでサーバーサイドからデータをPOST送信する場面が増えてきた。

使う場面

  1. サーバーでBOTを作っている時など、定期的なバッチ処理で特定のサービスに対してOAuth認証を行う場合など PHPプログラムをCLIで起動してそのまま直接POSTする場合。
  2. サーバー間の通信処理を自動で行う場合など、PHPのheader関数でURLをGETでたたくだけでは、物足りない場合。
  3. コマンドラインでサーバーにあるファイルを別サーバーに送信する。

サンプル

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); こんな感じで、クエリに追記セットします。

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。