Так немного мелочи первый ..PHP NTLM сессии с Curl
Там написано на веб-сайте ASP.NET, которая использует протокол NTLM для проверки подлинности пользователей, которые хотят войти. Это совершенно нормально, когда они обычно используют его, они вводят URL-адрес веб-сайта, они предоставляют свои учетные данные, аутентифицируют и поддерживают сеанс в веб-браузере.
Что я хочу сделать, это создать сайт PHP, который будет действовать как бот. Это веб-сайт моей компании, и я одобрен для этого. Проблема, с которой я сталкиваюсь, - это управление сеансом. Пользователи смогут вводить свои учетные данные на моем веб-сайте PHP, а мой PHP-сайт будет аутентифицировать их на целевом сайте, используя 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 рукопожатием, как это кажется), и выбирает веб-сайты содержания. Он также сохраняет идентификатор сеанса, который отправляется обратно в файл cookie.
Что я пытаюсь сделать дальше, это комментарий опции CURLOPT_USERPWD
, в надежде, что этот скрипт будет использовать идентификатор сеанса, хранящийся в файле cookie, для аутентификации ранее зарегистрированного пользователя во втором выполнении этого скрипта. Он может избавиться от пользовательских учетных данных и не хранить его нигде таким образом, потому что хранить его в ручном сеансе, базе данных или в другом месте небезопасно.
Мне нужно это, потому что бот будет использовать CRON, чтобы периодически проверять, изменился ли статус сайта и выполнить некоторые действия пользователя в качестве реакции на это. Но для этого сначала должен быть аутентифицирован пользователь, а его имя пользователя и пароль не должны храниться в любом месте, поэтому я должен использовать информацию сеанса, установленную при его первоначальном входе в систему.
CURL, похоже, НЕ ДЕЛАЕТ ЭТО. Когда я выполняю скрипт второй раз с комментарием CURLOPT_USERPWD
, он не использует сохраненный файл cookie для проверки подлинности. Вместо этого он REWRITES файл cookie с не относящимися к делу данными отправляет мне из службы в качестве ответа на NOT AUTHRORISED запрос доступа.
Мои вопросы: Почему cURL не использует хранимую информацию сеанса для проверки подлинности? Есть ли способ сохранить этот сеанс с веб-сайтом cURL и NTLM?
Заранее спасибо.
Ну, не то, что я искал, потому что моя проблема заключается не в том, чтобы обрабатывать аутентификацию, а в том, чтобы обрабатывать и поддерживать сеанс, поэтому пароль и имя пользователя можно было отбросить после входа в систему. –
Спасибо за ответ, но эта часть, как я сказал в своем посте, тоже сделал. cURL автоматически сохраняет информацию о сеансе в файле cookie. У меня уже включен CURLOPT_RETURNTRANSFER, так как он указан в моем списке кодов. Проблема в том, что, как я сказал в своем посте, ОТПРАВИТЬ ИНФОРМАЦИЮ ОБ ОБРАТНОЙ СВЯЗИ во втором запросе. Перечисленный мной сценарий не делает этого, несмотря на то, что у него есть информация о сеансе, хранящаяся в файле cookie. Мне не нужно сохранять cookie из заголовка ответа вручную с помощью регулярного выражения, потому что cURL делает это автоматически. Он просто не использует его во втором запросе. –