

お世話になります。
PHPを用いてリダイレクトさせたいのですが、リダイレクト先にはHTTPリクエストのPOSTを用いて情報を送信させる方法を教えてください。
いろいろ調べたのですが、
curl関数やfsockopen関数では、POSTでリクエストして、レスポンスが返ってくるので、望むような方法が実現できません。
なぜ、リダイレクトさせたいかというと、リダイレクト先は違うhostなので、画像やcss、formなどがうまく表示・動作できないようになってしまうためです。
送信方法として、フォームによる送信を行いますと、クライアント側に情報を埋め込んで送信するため、セキュリティ的に問題がありますので、PHPから情報を飛ばしたいと考えております。
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
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を使う、など)
もし他に良い方法が出てこないようでしたら、そうなると、あとは工数・時間と相談して、どこでどのように妥協するか(または理解を求めるか)、じゃないでしょうか。
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:(処理) (→) (表示)
とすると思います。
ご回答ありがとうございます。
リダイレクトのところを、遷移という意味で使用してしまいました。
上記のように、なんらかのプログラムをひとつはさまなければ無理なのですね。
こちらの説明が足りなくて申し訳ないのですが、サーバBにあたるところが、他のサイトのシステムなので上記のような処理をすることができません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SplFileObject を利用したとき...
-
PHPSpreadsheetによる書き出し...
-
BASIC認証のフォームをデザイン...
-
phpでクラスのメソッドで同名の...
-
PHPSpreadsheetを使って関数を...
-
EC-CUBEをeclipseからコンパイ...
-
PHPで画像の渡しが上手く行きま...
-
php エラー
-
PHP8でWarning:Undefined varia...
-
composerをインストールしたい...
-
phpの問い合わせフォームを作っ...
-
phpのheader("Location:#pos")...
-
awsにApacheとPHPを入れて、何...
-
アップロードファイルの数に応...
-
掲示板を作成しておりアップロ...
-
PHPを使って、別サイトの一部を...
-
php エラー
-
phpinfo で MySQL のバージョン...
-
コメント機能に返信欄を矢印で...
-
marginの値でマイナス値を設定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
sleepの負荷
-
呼び出し元のURLを知りたいのです
-
ASP.NET(VB)VBソースからJavas...
-
ブラウザを閉じた瞬間にログアウト
-
PHPでフォームの自動入力できま...
-
GDとImageMagick どっちがおす...
-
php ob_flushが全く動作しない
-
このプログラムの認証ウィンド...
-
掲示板の作り方
-
イベント処理について
-
自作PHPがどれ程サーバの負担に...
-
読み込み中に「Now Loading」を...
-
スクリプト言語でおすすめのもの
-
PHPを書籍で勉強しているのですが
-
PHP内でJavaScriptの処理は可能?
-
PHPでオンライン将棋ゲーム
-
mkdirでフォルダ名“予定表示”を...
-
PHPを用いてPOSTし、リダイレク...
-
jQueryのAjaxで通信の途中結果...
-
10秒毎に同じプログラムを繰り...
おすすめ情報