あるPHPページを自動転送ページとし、転送先に特定の値をPOST送信したいと考えています。
同じような質問があり、fsockopenを使ってすると良いようなのですが、どうしても上手くいきません。
現状、POST送信は成功しているのですが、URLが自動転送ページのままで、転送先ページのテキストのみが表示されている状態です。
どうすれば転送先ページに完全に移ってしまえるでしょうか。
ご助力下さい。
<ソース>
$url = "http://hoge.co.jp/test.php"; //転送先URL
$method = "POST";
$headers = "POST http://hoge.co.jp/test.php HTTP/1.1\r\n"; //転送先URL
$postdata = "parm=ok";
$URL = parse_url($url);
if(!isset($URL['port'])){$URL['port'] = 80;}
//リクエストヘッダ
$request = $method." ".$URL['path']." HTTP/1.0\r\n";
$request .= $headers;
$request .= "Host: ".$URL['host']."\r\n";
$request .= "User-Agent: PHP/".phpversion()."\r\n";
$request .= "Content-Type: application/x-www-form-urlencoded\r\n";
$request .= "Content-Length: ".strlen($postdata)."\r\n";
$request .= "\r\n";
$request .= $postdata;
//相手サーバへ接続
@$fp = fsockopen($URL['host'], $URL['port']);
// 接続失敗
if (!$fp) {die("ただいまメンテナンス中です。\n");}
//POSTで送信
fputs($fp, $request);
$response = "";
while (!feof($fp)) {
$response .= fgets($fp, 4096);
}
fclose($fp);
//ヘッダ部分とボディ部分を分離
$DATA = split("\r\n\r\n", $response, 2);
//出力
echo "<!--\n".$request."\n-->\n";
echo "<!--\n".$DATA[0]."\n-->\n";
echo $DATA[1];
No.4ベストアンサー
- 回答日時:
#1 です。
> 最後にheader("Location: {$url}");をいれると、一般向けページが表示されてしまったので、POST送信できていないようですT T
タイムラグという事無いですか?
相手のサーバの反応の関係で遅れているという可能性はありませんか?
postした後コンマ数秒遅らせてみたらどうでしょうか?
http://jp2.php.net/usleep
usleep(500000);
header("Location: {$url}");
別解として、メタタグやJavaScriptでリダイレクトする方法も考えられます(恐らくPHPよりは遅延すると思われます)。JavaScriptで遅延させると言うことも可能ですね。
echo <<<SCRIPT
<a href="{$url}">{$url}</a>へジャンプします。ジャンプしない場合は<a href="{$url}">クリック</a>してください。
<script type="text/javascript"><!--
setTimeout("location.href='{$url}'",500);
//-->
</script>
SCRIPT;
参考まで。
何度もご回答いただきありがとうございます。
また、お礼が遅れましたことをお詫びさせてください。
教えていただいた内容などを含め、いろいろ試してみたのですがまだまだ未熟で実現にはいたりませんでした。
ひとまず今回は教えていただいたJavascriptを活用させていただきました。
また勉強して実現しようと思います。
ありがとうございました。
No.3
- 回答日時:
POSTでリダイレクトしたいということでしょうか?
なら出来ないと判断して別の方法を考えた方がいいかと。
parm=okなら認証というのも脆弱ですし、そこらは変更できないものでしょうか。
POSTでリダイレクト自体は307ステータスを返せば一応はできますが。
回答ありがとうございます。
>parm=okなら認証というのも脆弱ですし、そこらは変更できないものでしょうか。
これはリンクしたい相手先サーバの設定なので変更できないのです;
こちらはリンクさせてもらう立場なので、できなければリンクをあきらめればいいのですが。。。
GETではすごく簡単に渡せるのを知っていたのですが、POSTがこんなに難しいとは思いませんでした。
No.2
- 回答日時:
回答ありがとうございます。
参考ページを読ませていただいたのですがPEARが使いたくて仕方ないですが、私の使っているサーバではPEARが実装されていないようで使えませんでした。
POSTで値を送信しながら別ページに遷移するのを全て自動でなんて追加モジュールでもいれないとムリなのでしょうか・・・
No.1
- 回答日時:
データを転送後、最後に出力をせず、ヘッダーでリダイレクトしたらどうですか?
header("Location: {$url}");
早速の回答ありがとうございます。
助言を呼んで「なるほど!」とセットしてみたのですが、今度は相手先URLには飛ぶのですが値がPOST送信されていないようです。
というのも、転送先ページでは、”ok”がPOSTで送信されていれば会員ページを表示してくれますが、送信されていなければ一般向けページが表示されてしまうのです。
最後にheader("Location: {$url}");をいれると、一般向けページが表示されてしまったので、POST送信できていないようですT T
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
訪問回数が素数の場合、違うメ...
-
XML&PHP~数値の取り出し方
-
DBから取得した内容を横表示
-
フォントの色を変えるには?
-
透過PNGが透過されない!!
-
FTPコマンドでディレクトリごと...
-
バッチを用いたフォルダの自動移動
-
PHPのif文でその処理を途中で抜...
-
別ファイルの変数を呼び出した...
-
.phpと.incファイルの違いはな...
-
一定時間毎に同じ動作を繰り返...
-
MySQLのdatetime型の月日0を削...
-
「クラス関数」「メンバ関数」...
-
リンク先を隠す方法はないでし...
-
ラッパークラスって何ですか?
-
Subversionのリポジトリの削除
-
$_SESSION 有効期限をブラウザ...
-
BASP21メール送信(SMTP-AUTH認...
-
CFileDialogの最初のディレクト...
-
include先でのinclude元の変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのタイムアウトについて
-
php で C言語のdefineマクロの...
-
「include」と「file_get_conte...
-
cakephpのサブタイトルはどこで...
-
phpでハイパーリンクして値を持...
-
同じような処理を一つにまとめたい
-
PHPでxmlファイルへのデータの...
-
htsp ?? <?= ?>??
-
BASIC認証のユーザー名をPHPで...
-
PHP+MySQLでXMLを作成し、それ...
-
phpのswitch文のcaseで
-
php4からphp5へ移行した際のurl...
-
PHPで、GET または POST で得ら...
-
phpのXSS対策 どこに問題が?
-
phpでcssを使う荒業
-
foreachの使い方
-
DOMでXML操作
-
PEARのHTTP_Requestをインストール
-
echoを使用すると、エラー
-
検索結果を2列で表示させたい
おすすめ情報