авторизация на aukro.ua (curl, php) помогите пожалуйста подправить

Статус
В этой теме нельзя размещать новые ответы.

maxy666

Профессор
Регистрация
23 Июл 2012
Сообщения
142
Реакции
44
Пробую авторизоваться на интерент аукционе аurko.ua (украинская версия интернет аукциона наподобие молоток.ру)
Нашел версию авторизации на форуме, правда за 2012 год. С того времени способ авторизации немного изменился, добавилось несколько защитных полей и изменилась структура формы:
Список полей которые нужно передавать при авторизации:
userForm_redirectUri userForm[redirectUri]
userForm_clientId userForm[clientId]
userForm_responseType userForm[responseType]
userForm_scope userForm[scope]
userForm_state userForm[state]
value="{"request":"\/myaccount\/","urlPrefix":"http:\/\/aukro.ua","cobrandId":0,"token":"cf075b4c314b1cbcf040415b7400c342","guest":[]}" />
userForm_login userForm[login]
userForm_password userForm[password]
userForm__token userForm[_token]

Немного подправил, но авторизовать все равно не получается, посмотрите пожалуйста в чем ошибка. Или может у кого есть готовый вариант авторизации.
PHP:
<?php
include('simple_html_dom.php'); // подключаем Simple HTML DOM

$url = 'http://aukro.ua'; // URL сайта на котором будем авторизоваться
$urlTo = 'https://ssl.aukro.ua/login.php'; // URL на которой будем слать POST данные
$login = 'xxxxxxx';
$pass = 'xxxxxxxxx';

$ch = curl_init('http://aukro.ua/mainpage_login.php');
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); // попытка стереть куки
curl_setopt ($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0");
$content=curl_exec($ch);
//echo $content;
$html = str_get_html($content);
$global_login_hash=$html->find('userForm[id=userForm_login] input[name=global_login_hash]',0)->value;
$session=$html->find('userForm[id=userForm_login] input[name=session]',0)->value;
$session_login_hash=$html->find('userForm[id=userForm_login] input[name=session_login_hash]',0)->value;
$url=$html->find('userForm[id=userForm_login] input[name=url]',0)->value;
$cod=$html->find('userForm[id=userForm_login] input[name=cod]',0)->value;
$token=$html->find('userForm[id=token] input[name=token]',0)->value;
$version=$html->find('userForm[id=userForm_login] input[name=version]',0)->value;
//echo $global_login_hash.'<br>';
unset($ch);

$post1='global_login_hash='.$global_login_hash.'&session='.$session.'&session_login_hash='.$session_login_hash.'&url='.$url.'&cod='.$cod;
$post1_1='session='.$session.'&global_login_hash='.$global_login_hash.'&session_login_hash='.$session_login_hash.'&url='.$url.'&cod='.$cod;
//'&version='.$version;
$post2='&user_login='.$login.'&user_password='.$pass;
//echo $post1.'<br>';

$ch = curl_init(); // Инициализируем сеанс CURL
//curl_setopt($ch, CURLOPT_URL, $url); // Заходим на сайт
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
// не проверять SSL сертификат
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_VERBOSE, TRUE);
// не проверять Host SSL сертификата
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_URL, $urlTo); // Устанавливаем адрес куда будем слать POST данные
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла
curl_setopt($ch, CURLOPT_REFERER, 'https://ssl.aukro.ua/enter_login.php?'.$post1.'&version='.$version);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0");
curl_setopt($ch, CURLOPT_POST, true); // Говорим, что информация будет отправляться методом POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $post1_1.'&version='.$version.$post2); // Передаем POST данные
//Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header ответа включалась в вывод.
//curl_setopt($ch, CURLOPT_HEADER, true);
//curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Иногда бывает, что после отправки данных происходит редирект heaer('Location:...').
// Этот параметр говорит о то, чтобы мы следовали за ними, а не оставались на месте после отправки данных

$html = curl_exec($ch); // Записываем пришедшие данные в переменную
$f=fopen('html1.txt','w');
fwrite($f,$html);
fclose($f);
//$result = curl_multi_getcontent ($ch);
$a1=strpos($html,'/direct_login.php');
$a2=strpos($html,'><P><b>Автоматическое');
$str=substr($html,$a1,$a2-$a1-1);
$f=fopen('str.txt','w');
fwrite($f,$str);
fclose($f);
echo $str.'<br>';
$tm=time();
while ((time()-$tm)<3);
curl_close($ch);
//echo $html;

/*
$tm=time();
while ((time()-$tm)<3);
*/

$ch = curl_init('http://www.aukro.ua'.$str);
//curl_setopt($ch, CURLOPT_URL, 'http://www.aukro.ua'.$str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt'); // Теперь читаем cookies с файла
curl_setopt ($ch, CURLOPT_VERBOSE, TRUE);
curl_setopt($ch, CURLOPT_REFERER, 'https://ssl.aukro.ua'.$str);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0");
curl_setopt($ch, CURLOPT_POST, false); // Говорим, что информация будет отправляться методом POST
curl_setopt($ch, CURLOPT_HTTPGET, true);
//Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header ответа включалась в вывод.
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$html = curl_exec($ch); // Записываем пришедшие данные в переменную
$f=fopen('html2.txt','w');
fwrite($f,$html);
fclose($f);


curl_close($ch); // Закрываем сеанс работы CURL
echo 'html: '.$html.'<br>';
//echo 'result: '.$result.'<br>';

?>
 
Последнее редактирование:
саму форму с полями можно получить так:
PHP:
$curl_options = array(
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_URL => 'http://aukro.ua/NewItem/',
    CURLOPT_AUTOREFERER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_RETURNTRANSFER => true,
);

$ch = curl_init();

curl_setopt_array( $ch, $curl_options );

$html = curl_exec( $ch );

curl_close( $ch );

preg_match_all( '~<input\b(?:(?=(\s+(?:name="([^"]*)"|value="([^"]*)")|[^\s>]+|\s+))\1)*>~ism', $html, $inputs, PREG_SET_ORDER );

$post = array();
for( $i=0, $c=sizeof( $inputs ); $i<$c; ++$i ){
    $input = $inputs[ $i ];

    if( empty( $input[ 2 ] ) ){

        continue;
    }
    $post[ $input[ 2 ] ] = $input[ 3 ];
}

var_dump( $post );
логин/пароль заполните и авторизуйтесь (куки не забудьте)..
 
сильных навыков работы с curl не имею. Помогите пожалуйста передать значение логина/пароли, или если можно подскажите где можно подучиться работать с сurl, например на книги, или сайт со статьями
 
PHP:
$curl_options = array(
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_URL => 'http://aukro.ua/NewItem/',
    CURLOPT_AUTOREFERER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_RETURNTRANSFER => true,
);

$ch = curl_init();

curl_setopt_array( $ch, $curl_options );

$html = curl_exec( $ch );

curl_close( $ch );

preg_match_all( '~<input\b(?:(?=(\s+(?:name="([^"]*)"|value="([^"]*)")|[^\s>]+|\s+))\1)*>~ism', $html, $inputs, PREG_SET_ORDER );



$post = array();
for( $i=0, $c=sizeof( $inputs ); $i<$c; ++$i ){
    $input = $inputs[ $i ];

    if( empty( $input[ 2 ] ) ){

        continue;
    }
    $post[ $input[ 2 ] ] = (( isset( $input[ 3 ] ) ) ? $input[ 3 ] : '' );
}

// тут задаём логин и пароль.. поля вынуты из формы
$post[ 'userForm[login]' ] = 'my_login';
$post[ 'userForm[password]' ] = 'my_password';


$curl_options = array(
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_URL => 'https://ssl.aukro.ua/fnd/authentication/',
    CURLOPT_AUTOREFERER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_RETURNTRANSFER => true,

    // собствнно передача постом
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => $post,
);

$ch = curl_init();

curl_setopt_array( $ch, $curl_options );

$html = curl_exec( $ch );

curl_close( $ch );

echo( $html );

сам, относительно давно, начинал php с Для просмотра ссылки Войди или Зарегистрируйся (второго издания).. потом как-то само пошло - работа в команде, php.net, форумы, гугл, пробы, ошибки, свои проекты, т.п...
 
Последнее редактирование:
кстати, сам всегда с этим тупил, сейчас использую вот эту статью с хабра Для просмотра ссылки Войди или Зарегистрируйся там есть скриптик в ней для автоматизации написания таких скриптов.
 
Вопрос к ТС: получилось залогиниться? Я раз 5 подходил к этой проблеме - ни разу не получилось
 
к сожалению нет, юзал сайт Для просмотра ссылки Войди или Зарегистрируйся по совету kentastik, сайт не плохой, но ничего не получилось(внизу пример кода который выдал данный сайт)
немного разобрался с сurl по совету книги Котерова, большое спасибо за книгу BDSG, но к сожалению с вашем кодом не разобрался, пробую писать что то свое...немного потренировался на простых сайтах...но аукро мне не поддалось(((

Построил алгорит работы авторизаци(возможно и неверный, поправьте если что:(
1. Заходим на страницу Для просмотра ссылки Войди или Зарегистрируйся получаем из нее токены и значение других полей:
"userForm[_token]
'userForm[clientId]
$'userForm[login]
'userForm[password]
'userForm[redirectUri]
'userForm[responseType]"
2. Совершаем заполнение логина и пароля, отправляем форму, следуем за переадресацией.

Пока конечно только пробую, использую библиотеку simple html dom, но значение полей так достать и не удается:
$content = curl_exec($ch);
$html = str_get_html($content);
$ret = $html->find('input[id=userForm__token]',0)->value;');
print_r ($ret);
Возможно я что то делаю не так, пожалуйста помогите мне, или посоветуйте что то, а то пока ничего особо не получается.

PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://ssl.aukro.ua/fnd/authentication/');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 'false');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0');
curl_setopt($ch, CURLOPT_REFERER, 'https://ssl.aukro.ua/fnd/authentication/?response_type=code&client_id=jIB74EPu19OyztMw&redirect_uri=https%3A%2F%2Fssl.aukro.ua%2Ffnd%2Flanding-page%2F&scope=login&state=%7B%22request%22%3A%22%5C%2Fmyaccount%5C%2F%22%2C%22urlPrefix%22%3A%22http%3A%5C%2F%5C%2Faukro.ua%22%2C%22cobrandId%22%3A0%2C%22token%22%3A%226192a22b74f49ec790d2ce151e191529%22%2C%22guest%22%3A%5B%5D%7D');
curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

$header = array();
$header[] = 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8';
$header[] = 'Accept-Charset: ';
$header[] = 'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3';
$header[] = 'Pragma: ';
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, true);

$fields = array();
$fields[] = 'userForm[_token]=999f541b51190b9ff3a6241e81ea4c595b00849b';
$fields[] = 'userForm[clientId]=jIB74EPu19OyztMw';
$fields[] = 'userForm[login]=LOGIN111';
$fields[] = 'userForm[password]=PASSWORD11';
$fields[] = 'userForm[redirectUri]=https://ssl.aukro.ua/fnd/landing-page/';
$fields[] = 'userForm[responseType]=code';
$fields[] = 'userForm[scope]=login';
$fields[] = 'userForm[state]={"request":"\/myaccount\/","urlPrefix":"http:\/\/aukro.ua","cobrandId":0,"token":"6192a22b74f49ec790d2ce151e191529","guest":[]}';

curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $fields));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_exec($ch);
curl_close($ch);"
 
Что бы залогиниться (не конкретно на аurko.ua) нужно принимать куки и проверять редиректы. А для начала нужно проверить саму форму логина, там могут быть разные парметры которые генерируются ява-скриптами. Но не проходимых защит нет - есть те над которыми нужно чуток посидеть. Конечно такие варианты лучше делать не на Curl, а самому вручную строить запросы.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху