header(”location〜”)
を利用して、
変数の値をPOSTで渡す、リダイレクト処理を行いたいと考えています。
location先は他サーバのphpファイルですが、POSTのみしか受け付けてくれないので、
GETはもちろん、セッションやクッキーによる変数渡しもできません。
perlだとHTTPクラスを利用すれば可能ということがわかったのですが、phpでも同様のことができるのでしょうか?
http://www.faqs.org/rfcs/rfc2616.html
これの 10.3.3 302 Found によりますと GET/HEAD以外によるリクエストを自動的にリダイレクトさせることは制限されています。
さらに10.3.3章のNote:を参照いただきたいのですが、多くの既存ブラウザは302受信の際、303を受信したかのようにPOSTをGETに代えて自動的にリダイレクトしています。
従いましてご要望の動作を実現するスタンダードな方法はおそらく存在しないことかと思われます。
よろしければJavaScriptか、HTMLのFormをはさんでPOSTさせるようにしてはいかがでしょうか。
PHPのcurl関数ライブラリを使えば簡単に実装できます。
$ch = curl_init('送信先サーバURI');
//ヘッダ作成
$header = "POST 【DOCUMENT_ROOT以下の送信先ファイルパス】 HTTP/1.0\r\n"
. "Host: 【送信先サーバ】\r\n"
. "Content-Type: text/xml; charset=【エンコーディング】\r\n"
. "Content-Length: ".strlen($【送信したいデータ】)
. "\r\n\r\n";
//送信先のサーバにエンコーディングを合わせる
$header = mb_convert_encoding($header,'【送信エンコーディング】','【内部エンコーディング】');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $header.【送信したいデータ(変数に格納済)】);
curl_exec($ch);
curl_close($ch);
ob_start();
などで標準出力をキャプチャすれば、
実行結果がわかりますよ。
ob_start(); //標準出力を抑制した中で
POST処理
$result=ob_get_contents(); //バッファを格納
ob_end_clean(); //メモリ開放
上記手順で実行結果(相手先サーバからのレスポンス)
が変数$resultに格納できますので
その中身をチェックすれば成否を確かめられると思います。
早速試してみます!
ありがとうございました
あと1つ聞きたいのですが、POSTで変数を送った結果をfile_get_contents()したりとかも
可能なのでしょうか?