PHPカールでリモートサイトにログインしてから、そのサイトにリダイレクトするにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/3676098

  •  01-10-2019
  •  | 
  •  

質問

私はこれがいくつかの方法で尋ねられたのを見ましたが、うまくいく答えを見つけることができません。

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");
}

これは機能するはずですが、私はそれをテストしません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top