Digest авторизация клиента на PHP

S1
На сайте с 08.10.2016
Offline
5
1989

Бился часов 5, но так и не решил эту задачу ((

Еще сильнее шокирован тем, что не нашел рабочих примеров в интернете. Да и нерабочих-то всего несколько (а может, это руки у меня кривые).

Задача такая.

Есть сайт mysite.com, доступ к которому возможен только через Digest-авторизацию.

Вход через браузер - без проблем.

Но если попробовать пройти авторизацию через CURL, то, естественно, после первого запроса возвращается ответ 401.

Заголовки получить, разумеется, могу, но что с ними дальше делать, как сформировать новый запрос (видимо, нужно его делать), не могу разобраться.

Может помочь кто-то? Был бы весьма признателен...

Prior
На сайте с 03.03.2008
Offline
184
#1

Как-то так. Вроде рабочий пример.


$url="http://yoursite.ru/login.php";
$postinfo = "login=".$username."&password=".$password.'&act=login';

$cookie_file_path = "cookie.txt";

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
curl_setopt($ch, CURLOPT_COOKIE, "cookiename=0");
curl_setopt($ch, CURLOPT_USERAGENT,
"Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postinfo);
$res=curl_exec($ch);

curl_setopt($ch, CURLOPT_URL, "http://yoursite.ru/profile.php");

curl_exec($ch);
curl_close($ch);

Только урлы само-собой поправить нужно и заполняемые поля.

P.S. Всё-таки ночью надо спать, пардон, пример для обычной авторизации, не для дайджест.

Ответы на вопрос - https://answers.net.pl
ДП
На сайте с 23.11.2009
Offline
203
#2

Насколько я помню, дайжест - это стандартное браузерное окошко для ввода логина-пароля?

Если да - то по сути там добавляется один заговловок в запросах к серверу. Если вы можете отследить заголовки в браузере, то посмотрите его и добавляйте ко всем запросам.

А так вот пример есть авторизации для курла: http://stackoverflow.com/questions/18664957/client-part-of-the-digest-authentication-using-php-post-to-web-service

S1
На сайте с 08.10.2016
Offline
5
#3

Я так и не понял, что вчера не работало у меня...

Написанный изначально наипростейший вариант прекрасно авторизуется.

Если кого-то также заглючит, как меня, то, действительно, ложитесь спать, а утром воспользуйтесь такой функцией:

function digestAuthorization($url)

{
$username = "ВАШ_ЛОГИН";
$password = "ВАШ_ПАРОЛЬ";

$options = array
(
CURLOPT_URL => $url,
CURLOPT_HEADER => true, // если не нужны заголовки, то 'false'
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true, // если не следовать редиректу, то 'false'
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_USERPWD => $username.":".$password,
CURLOPT_HTTPAUTH => CURLAUTH_DIGEST
);
$ch = curl_init();

curl_setopt_array( $ch, $options );
$response = curl_exec( $ch );
curl_close($ch);
}

Спасибо откликнувшимся )

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий