• 締切済み

PHPを用いてPOSTし、リダイレクトする方法

お世話になります。 PHPを用いてリダイレクトさせたいのですが、リダイレクト先にはHTTPリクエストのPOSTを用いて情報を送信させる方法を教えてください。 いろいろ調べたのですが、 curl関数やfsockopen関数では、POSTでリクエストして、レスポンスが返ってくるので、望むような方法が実現できません。 なぜ、リダイレクトさせたいかというと、リダイレクト先は違うhostなので、画像やcss、formなどがうまく表示・動作できないようになってしまうためです。 送信方法として、フォームによる送信を行いますと、クライアント側に情報を埋め込んで送信するため、セキュリティ的に問題がありますので、PHPから情報を飛ばしたいと考えております。 よろしくお願いします。

  • mundi
  • お礼率75% (6/8)
  • PHP
  • 回答数4
  • ありがとう数6

みんなの回答

回答No.4

受取側に手を入れることができないということであれば、残るは#1さんが#3で言われている方法しかないのかな、と思いました。 ただ、その方法は、恐らくですが、その先(処理&遷移後)のことを考えた場合に問題が出てくるような気もします。(「遷移したらそこには結果表示しかない、そこで作業終わり」であれば十分有効だろうとは思います) もしもそうだとすると、私の最初の答えぐらいしか残っていません。 (以下、先の回答より微妙に丁寧に書いてみました) 1)クライアント(フォーム等) ↓ 2)サーバA:PHPにてjavascript生成 ↓ そのjavascript(を使用するhtmlに)にrediredt 3)サーバA:生成したjavascriptをjavascriptのOnloadなどで動作させ、そのままsubmit(POST)を行う ↓(POST) 4)サーバB:(処理、表示) 難点としては、3の時点でクライアントに値が渡ります。 が、少なくとも普通はユーザーは3という処理があること自体意識することはほぼないでしょうし、また、業務アプリでも実際にこういった処理はよく見かけます。(だから最初に思い付いた訳ですが) ついでに。もう1つ方法がありました。 クライアント(フォーム等)→ javascriptにて値を取得・生成などして、そのままjavascriptにてPOST                  ↓(POST) サーバB:(処理、表示) これにすると、懸念されている問題はほぼ解決するのではないかと思います。 但しこれは、PHPにて処理されようとしてることの全てをjavascriptにて行うことになりますので、作業としては面倒なことになるかも知れませんし、また環境や制約(Ajaxが不可であるなど)によっては更に難しいことになるかも知れません。また処理によっては、その処理中にDBへのアクセスが多い場合等はレスポンスの悪化も懸念されるので、その部分は別途ストアドにする等の工夫も必要になるかも知れません。 更についでに言うと、上記2つの方法をミックスさせるようなやり方もアリかと思います。(1つめの方法の2のjavascript生成の時にAjaxを使う、など) もし他に良い方法が出てこないようでしたら、そうなると、あとは工数・時間と相談して、どこでどのように妥協するか(または理解を求めるか)、じゃないでしょうか。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

#1です。なるほど。#2の方の回答で、ちょっと見えたような気がします。 別のサイト(サイトXとする)にリダイレクトしたい。ただし、その際に、最初にクライアントからPOSTで渡されたデータを、サイトXに引き継いで渡したい。 で、「『サイトXにPOSTでデータを投げるFORM』を含んだページを作って返し、ユーザにsubmitさせるなり、JavaScriptで自動でSubmitボタンを押させるなりして、サイトXに接続する」という方法は、考えついたが、採用したくないと言うことですね。 curl関数やfsockopen関数でサイトXにPOSTして、返った結果HTMLをそのままクライアントに返すのでは、 >画像やcss、formなどがうまく表示・動作できないようになってしまうためです。 と言うことが問題なのであれば、返った結果HTMLのHEADに、<base href="サイトXのURL"> を埋め込めば、そのHTML中の相対URLはすべてbaseで指定したURLからの相対と見なされるので、画像・CSSなどもそのままで正しく表示されるはずです。 サイトXがもし他人のサイトであれば、そのHTMLを自サイトの物であるかのように返すことについては、権利関係の問題があるかもしれないので、クリアしてください。

回答No.2

ご質問の「リダイレクト」を「遷移」に置き換えると意味が通じますので、その理解で回答してみます。違ったらごめんなさい。 結論から言いますと、されたいであろうことは、(多分)無理です。 多分というのは、私の知る限りにおいて、という意味です。他に方法があるのであればどなたかお願いします。>どなたか 以下は参考までに。 私がそれ(と同じように見える動作)を行いたい場合は、 クライアント(フォーム等) ↓ サーバA:PHPにてjavascript生成 ↓(javascriptにてPOST) サーバB:(処理、表示) とするか、 クライアント(フォーム等) ↓ サーバA:PHPにてredirect ↓(GET) サーバB:処理を行い、redirectまたはスクリプトか何かでPOST ↓ サーバB:(表示) のどちらかにすると思います。(直接POST&遷移させるのではなく間に何らかのプログラムを1つ噛ませます) また、処理的に可能であれば(POST後の処理がデータベース更新等の処理で、結果表示は現在のデータ表示に過ぎない場合等)、 クライアント(フォーム等) ↓ サーバA:cURLなどでPOST処理後、redirect ↓(POST)                  ↓ サーバB:(処理)    (→)     (表示) とすると思います。

mundi
質問者

お礼

ご回答ありがとうございます。 リダイレクトのところを、遷移という意味で使用してしまいました。 上記のように、なんらかのプログラムをひとつはさまなければ無理なのですね。 こちらの説明が足りなくて申し訳ないのですが、サーバBにあたるところが、他のサイトのシステムなので上記のような処理をすることができません。

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

「リダイレクトさせたい」とはどういう意味ですか?おそらく言葉の意味を間違えているので、意味が通じません。「リダイレクト」という言葉を使わないで、説明してみてください。

mundi
質問者

お礼

ご回答ありがとうございます。 リダイレクトの使いかたが間違っていたのですね・・ 実現したいことは、 PHPでPOSTして、POSTした場所に遷移するという処理を同時に行いたいということです。

関連するQ&A

  • 特定の値をPOST送信で他のサーバーに渡したい

    ある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];

    • ベストアンサー
    • PHP
  • PHPのfsockopenを使用してファイルのアップロード方法

    PHPのfsockopenを使用してファイルのアップロード方法 宜しくお願い致します。 PHPでHTTPポートなどに接続させて、POSTやGETでデータを送信できるようにする関数のfsockopenを使用して、HTMLのformを使用せずにPHPプログラムのみでサーバ上にあるファイルを別のサーバへアップロードする方法はありませんか? 文字列を送信する事はできるので、ファイルのアップもできそうなのですが、やり方がわかりません。

    • ベストアンサー
    • PHP
  • PHPプログラムの内部からPOSTする方法について

    お世話になります。PHPプログラムの内部からHTTPリクエストのPOSTを使ったデータの送信について教えてください。 あるサービスにPOSTでデータを送るのですが,HTMLのform要素から直接目的のサーバにPOSTするのではなく,一度自分のサイトのPHPプログラムにPOSTして,ある条件を満たすデータのみ目的のサイトへPOSTしたいのですが,PHPプログラムの内部からHTMLのform要素のようにPOSTすることは可能でしょうか。 最終的にPOSTしたいのは他社が行っているサービスです(メール一括送信システム)。 全く手がかりがつかめなく,困っております。手がかりでも良いので教えてください。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpを利用してPOSTメソッド送信し、そのまま画面遷移をしたいのですが・・・

    PHPを利用してPOSTメソッドで情報を送信し、その送信先に画面遷移をしたいのですが、よくわかりません。 hiddenで情報を格納してbodyでonloadにformをsubmitする方法を取っていたのですが、それでは画面遷移中にESCキーを押されると送信情報を読み取られるおそれがあるのでその方法はやりたくないのです。 調べてみると、curl関数を利用すると、実現したいことが実現できると書かれているページも見つけたのですが具体的な方法がよくわかりません。 参考になるページや方法など知っている方は教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで画像のアップについて

    初歩的な問題で申し訳ありません。各店舗のホームページの掲示板にセールの書き込みをしたいのですが、テキスト部分はアップできるのですが、画像がどうしうてもできません。アドバイスをお願いします。 <?php require'HTTP/Client.php'; // コンストラクタに渡すパラメータの設定 $option = array( "timeout" => "10", // タイムアウト "allowRedirects" => true, // リダイレクトを許容するか?true/false "maxRedirects" => 3, // リダイレクトする場合の最大回数 ); // HTTPクライアントの作成 $client = new HTTP_Client($option); $posturl = "http://hogehoge.com/bbs.php"; //$imgUrl = $_POST['data']; // 送信パラメータの設定 $params = array( "title" => $_POST['title'], "file" => $_FILES['data'], "mes" => $_POST['mes'], "mode" => "write", ); // POSTリクエストの送信 $code = $client->post($posturl, $params); // レスポンスのチェック if ($code != "200") { echo "リクエスト失敗"; } // POSTリクエストに対して返って来たHTMLを出力 $response = $client->currentResponse(); echo $response["body"]; ?>

    • 締切済み
    • PHP
  • httpからhttpsへのリダイレクト方法

    すいません、よくわかりませんので教えて下さい。.htaccessに記述してhttpにアクセス来たものをhttpsへリダイレクトしたいです。 今の状況は下記です。 AddHandler application/x-httpd-php53 .php RewriteEngine On # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(sanetsu.com) RewriteCond %{REQUEST_URI} !^/(sanetsu.com)/ RewriteRule ^(.*)$ http://www.sanetsu.com/$1 [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(www.burikama.com) RewriteCond %{REQUEST_URI} !^/(www.burikama.com)/ RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/ [L] # Main RewriteRule for multidomain. RewriteCond %{HTTP_HOST} ^(burikama.com) RewriteCond %{REQUEST_URI} !^/(burikama.com)/ RewriteRule ^(.*)$ http://www.burikama.com/$1 [L] # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress すいません、上記の記述をどのように変更したらhttpsへリダイレクトさせることができますでしょうか?前任のweb担当の方と連絡が付かないので教えていただけたらありがたいです。 宜しくお願い致します。

    • ベストアンサー
    • HTML
  • PHPのHTTP/Requesをローカルでテストする方法は?

    PHP初心者なのですが、 初めてPHPのPEARパッケージにあるHTTP/Requestクラスを使って、別サーバーのAPIに対し、XMLのリクエストをし、XMLのレスポンスを受け取るやり取りをする関数を作りたいと思い、下記のような関数を作ってみたのですが、ローカル環境でどのようにテストすれば、HTTP/Requestの挙動をうまく確認できるかが思い浮かばずに、止まってしまいました。 どのようにテストすれば挙動がローカルで確認できるか、どなたか、ご教授お願いします!!! ----------- 制作した関数 引数1:リクエスト先URL、引数2: function testHttp($requestUrl,$requestXml){ $option = array( "timeout" => "3", // タイムアウトの秒数指定 "allowRedirects" => true // リダイレクトの許可 ); // HTTP_Requestの初期化 $http = new HTTP_Request($requestUrl, $option); // HTTPのヘッダー設定 $http->addHeader("User-Agent", "My PEAR PROGRAM"); $http->addHeader("Referer", $obj->protMember('LOGIN_URL')); $http->setMethod(HTTP_REQUEST_METHOD_POST); // HTTPリクエスト実行 $response = $http->sendRequest(); if (!PEAR::isError($response)) { $responseVal['resCode'] = $http->getResponseCode(); // ResponseCode $responseVal['resBody'] = $http->getResponseBody(); // ResponseBody return $responseVal; }else{ exit(); } }

    • 締切済み
    • PHP
  • POSTでリダイレクト

    リダイレクトモジュールをPHPで作成し、その中で JavaScriptを使用し、POSTでリダイレクト処理を行う際の JavaScriptのロジック方法をお願いします。 下記のurl_module.phpがPHPモジュールにあたり その中でクッキーの値や、DBからの値を取得して パラメータを生成し、あるページ先にPostで渡します。 http://www.test.com/url_module.php?ID=888 渡す先↓↓↓↓↓↓↓↓↓↓↓↓↓ http://www.test1.com/index.php (POSTで渡す値:ID=888、DB=AAA、NAME=ORAG) よろしくお願いいたします。

  • cURL関数を使用したphpからのpost送信と画面遷移

    cURL関数を使用したphpからのpost送信と画面遷移 とある事情で、どうしてもphpからpost送信をしなければならず、 且つ指定したURL先に画面遷移してほしいと考えております。 現状はpost送信自体は成功しているのですが、指定したURL先への画面遷移方法がわかりません。 無理にこの関数を使用した方法で実装をしたいわけではありませんが、 フォームのサブミットを押してpost送信をする処理と、同等の事をphpからpost送信、画面遷移が出来る方法があるのでしょうか? ご教授よろしくお願い致します。

    • 締切済み
    • PHP
  • HTTP 200 OKの後のリダイレクト?

    OS:Windows Vista Business IEやFirefoxであるフォーム(Host:xxx.example.com/test)にPOSTしました。 そのレスポンスのHttpヘッダに「HTTP/1.1 200 OK」とありました。 続いてブラウザは別のページの取得を行いました(Host:yyy.exmaple.com/other)。 私のつたない知識では、リダイレクトを行うのは、HTTPステータスコードが301~303などの場合だと思っていたのですが、 実際は上記のようにPOST後に200が返ってきたのに、別のURLへGETを投げていました。 (IE・Firefoxとも) POST後のHTTPヘッダを見たところ、ヘッダにはLocationはなく、「yyy.example.com/other」のURLの文字列も見当たりません。 ブラウザはどうやってPOST後のリダイレクトを検知し、さらに移動先のURLを知っているのでしょうか?

専門家に質問してみよう