PHPカールでリモートサイトにログインしてから、そのサイトにリダイレクトするにはどうすればよいですか
質問
私はこれがいくつかの方法で尋ねられたのを見ましたが、うまくいく答えを見つけることができません。
PHP/Curlを使用して、リモート.NETベースのサイトにログインするページを作成しました。それが行く限りうまく機能します - 私はcurl_execを介してログインページからデータを戻すことができ、それで何でもすることができます 本当 必要なことは、ユーザーをそのページにリダイレクトすることです。単純にリダイレクトすると、リモートサイトにログアウトされたページが表示されます。私は答えが、Curlがログインしたときに返されるCookieを取得し、2回目の呼び出しで渡すことです。 。 。何とかして。私は誰かを確信しています しなければならない これを行い、実用的な例を提供できます。助けてください - これは私を運転しています!
ありがとう、
マーク
解決
うまくいく答えが見つからないのも不思議ではありません。
それ無理。
他のヒント
問題は、ログインがエンドユーザーのIPアドレスからではなく、PHPサーバーから得られることです。したがって、ユーザーをリダイレクトすると、サイトはおそらくログインしているとは表示されないことです。
PHPサーバーのログインに提供されたCookieをエンドユーザーに戻すなどのことを設定できますが、リダイレクトされたサイトがわずかによく書かれている場合、それは落ちません。
両方のサイトを完全に制御し、それらがそれぞれのデータベースにアクセスできる場合は、バックエンドコードを書くことができるため、PHPサーバーは.NETサイトに着信ユーザーに期待するように指示できます。それはうまくいくかもしれません。ただし、両方のシステムでバックエンド作業を行う必要があります。
.NETサイトへのバックエンドアクセスがない場合、私がそれを行うことができる唯一の方法は、PHPサイトを.NETサイトの完全なプロキシとして使用することです。つまり、リダイレクトを実行するのではなく、 、PHPを介して.NETサイトの出力を直接表示するだけです。ただし、これに関連する他のあらゆる種類の問題があります。
サイトがCookieを使用する場合は、Curlを使用できます。
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "User=$user&passwd=$passwd");
curl_setopt ($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
$header = curl_exec($ch);
if (preg_match("/set-cookie:(.*)\n", $header, $m)) {
$cookies = preg_replace('/(expires|path|domain)=[^;]*;?/i', '', $m[1]);
header("Cookies: " . $cookies);
header("Location: $url");
}
これは機能するはずですが、私はそれをテストしません。