- 締切済み
PHPを用いてPOSTし、リダイレクトする方法
お世話になります。 PHPを用いてリダイレクトさせたいのですが、リダイレクト先にはHTTPリクエストのPOSTを用いて情報を送信させる方法を教えてください。 いろいろ調べたのですが、 curl関数やfsockopen関数では、POSTでリクエストして、レスポンスが返ってくるので、望むような方法が実現できません。 なぜ、リダイレクトさせたいかというと、リダイレクト先は違うhostなので、画像やcss、formなどがうまく表示・動作できないようになってしまうためです。 送信方法として、フォームによる送信を行いますと、クライアント側に情報を埋め込んで送信するため、セキュリティ的に問題がありますので、PHPから情報を飛ばしたいと考えております。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- imaoka0770
- ベストアンサー率65% (21/32)
受取側に手を入れることができないということであれば、残るは#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% (4900/10358)
#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を自サイトの物であるかのように返すことについては、権利関係の問題があるかもしれないので、クリアしてください。
- imaoka0770
- ベストアンサー率65% (21/32)
ご質問の「リダイレクト」を「遷移」に置き換えると意味が通じますので、その理解で回答してみます。違ったらごめんなさい。 結論から言いますと、されたいであろうことは、(多分)無理です。 多分というのは、私の知る限りにおいて、という意味です。他に方法があるのであればどなたかお願いします。>どなたか 以下は参考までに。 私がそれ(と同じように見える動作)を行いたい場合は、 クライアント(フォーム等) ↓ サーバA:PHPにてjavascript生成 ↓(javascriptにてPOST) サーバB:(処理、表示) とするか、 クライアント(フォーム等) ↓ サーバA:PHPにてredirect ↓(GET) サーバB:処理を行い、redirectまたはスクリプトか何かでPOST ↓ サーバB:(表示) のどちらかにすると思います。(直接POST&遷移させるのではなく間に何らかのプログラムを1つ噛ませます) また、処理的に可能であれば(POST後の処理がデータベース更新等の処理で、結果表示は現在のデータ表示に過ぎない場合等)、 クライアント(フォーム等) ↓ サーバA:cURLなどでPOST処理後、redirect ↓(POST) ↓ サーバB:(処理) (→) (表示) とすると思います。
- notnot
- ベストアンサー率47% (4900/10358)
「リダイレクトさせたい」とはどういう意味ですか?おそらく言葉の意味を間違えているので、意味が通じません。「リダイレクト」という言葉を使わないで、説明してみてください。
お礼
ご回答ありがとうございます。 リダイレクトの使いかたが間違っていたのですね・・ 実現したいことは、 PHPでPOSTして、POSTした場所に遷移するという処理を同時に行いたいということです。
お礼
ご回答ありがとうございます。 リダイレクトのところを、遷移という意味で使用してしまいました。 上記のように、なんらかのプログラムをひとつはさまなければ無理なのですね。 こちらの説明が足りなくて申し訳ないのですが、サーバBにあたるところが、他のサイトのシステムなので上記のような処理をすることができません。