だから最初にちょっとした雑学。
ログインしたいユーザーを認証するためにNTLMプロトコルを使用するASP.NETWebサイトに書かれています。通常使用する場合は、WebサイトのURLを入力し、資格情報を提供し、Webブラウザーでセッションを認証および維持します。
私がやりたいのは、ボットとして機能するPHPWebサイトを作成することです。これは私の会社の内部ウェブサイトであり、そうすることを承認されています。私が遭遇した問題は、セッションの管理です。ユーザーは私のPHPWebサイトに自分の資格情報を入力できるようになり、私のPHPWebサイトはcURLを使用してターゲットサイトに対してユーザーを認証します。
これまでに取得したコードは次のとおりです。
$cookie_file_path = dirname(__FILE__) . '/cookies.txt';
$ch = curl_init();
//==============================================================
curl_setopt($ch, CURLOPT_USERPWD, $username. ':' . $password);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_FAILONERROR, 0);
curl_setopt($ch, CURLOPT_MAXREDIRS, 100);
//=============================================================
$ret = curl_exec($ch);
上記のコードは、cURL(NTLMハンドシェイクを管理しているように見えます)によってターゲットWebサイトにログインし、Webサイトのコンテンツをフェッチします。また、Cookieファイルに返送されるセッションIDも保存されます。
次にやろうとしているのはCURLOPT_USERPWD
、このスクリプトがCookieファイルに保存されているセッションIDを使用して、このスクリプトの2回目の実行で以前にログインしたユーザーを認証することを期待して、オプションにコメントを付けることです。手動で作成したセッション、データベース、またはその他の場所に保存するのは安全ではないため、ユーザーの資格情報を削除して、その方法で保存しない可能性があります。
ボットはCRONを使用して、Webサイトのステータスが変更されたかどうかを定期的にチェックし、これに対する反応としていくつかのユーザーアクションを実行するため、これが必要です。ただし、これを行うには、最初にユーザーを認証する必要があり、ユーザー名とパスワードをどこにも保存しないようにする必要があります。そのため、ユーザーが最初にログインしたときに確立されたセッション情報を使用する必要があります。
CURLはこれを行わないようです。コメントCURLOPT_USERPWD
付きオプションを使用してスクリプトを2回実行すると、保存されているCookieを使用して認証された状態が維持されません。代わりに、NOT AUTHRORISEDアクセス要求への応答として、サービスから送信された関連データを含まないCookieファイルを再書き込みします。
私の質問は次のとおりです。cURLが保存されたセッション情報を使用してビーイングの認証を維持しないのはなぜですか?cURLおよびNTLMプロトコルベースのWebサイトでこのセッションを維持する方法はありますか?
前もって感謝します。