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

Тема в разделе "PHP", создана пользователем maxy666, 28 авг 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. maxy666

    maxy666 Постоялец

    Регистр.:
    23 июл 2012
    Сообщения:
    124
    Симпатии:
    31
    Пробую авторизоваться на интерент аукционе а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($chCURLOPT_COOKIESESSIONTRUE); // попытка стереть куки
    curl_setopt ($chCURLOPT_VERBOSETRUE);
    curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
    curl_setopt($chCURLOPT_COOKIEFILE'cookie.txt'); // Теперь читаем cookies с файла
    curl_setopt($chCURLOPT_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($chCURLOPT_RETURNTRANSFERtrue); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
    // не проверять SSL сертификат
    curl_setopt ($chCURLOPT_SSL_VERIFYPEER0);
    curl_setopt ($chCURLOPT_VERBOSETRUE);
    // не проверять Host SSL сертификата
    curl_setopt ($chCURLOPT_SSL_VERIFYHOST0);
    curl_setopt($chCURLOPT_URL$urlTo); // Устанавливаем адрес куда будем слать POST данные
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
    curl_setopt($chCURLOPT_COOKIEFILE'cookie.txt'); // Теперь читаем cookies с файла
    curl_setopt($chCURLOPT_REFERER'https://ssl.aukro.ua/enter_login.php?'.$post1.'&version='.$version);
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0");
    curl_setopt($chCURLOPT_POSTtrue); // Говорим, что информация будет отправляться методом POST
    curl_setopt($chCURLOPT_POSTFIELDS$post1_1.'&version='.$version.$post2); // Передаем POST данные
    //Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header ответа включалась в вывод.
    //curl_setopt($ch, CURLOPT_HEADER, true);
    //curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue); // Иногда бывает, что после отправки данных происходит редирект 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($chCURLOPT_RETURNTRANSFERtrue); // Делаем так, чтобы страница не выдавалась сразу в поток, а можно было ее записать в переменную
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); // Записываем cookies в файл, чтобы потом можно было их считать
    curl_setopt($chCURLOPT_COOKIEFILE'cookie.txt'); // Теперь читаем cookies с файла
    curl_setopt ($chCURLOPT_VERBOSETRUE);
    curl_setopt($chCURLOPT_REFERER'https://ssl.aukro.ua'.$str);
    curl_setopt($chCURLOPT_USERAGENT"Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko/20100101 Firefox/11.0");
    curl_setopt($chCURLOPT_POSTfalse); // Говорим, что информация будет отправляться методом POST
    curl_setopt($chCURLOPT_HTTPGETtrue);
    //Установите эту опцию в ненулевое значение, если вы хотите, чтобы шапка/header ответа включалась в вывод.
    curl_setopt($chCURLOPT_HEADERfalse);
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    $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>';

    ?>
     
    Последнее редактирование: 28 авг 2013
  2. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    саму форму с полями можно получить так:
    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$inputsPREG_SET_ORDER );

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

        if( empty( 
    $input] ) ){

            continue;
        }
        
    $post$input] ] = $input];
    }

    var_dump$post );
    логин/пароль заполните и авторизуйтесь (куки не забудьте)..
     
  3. maxy666

    maxy666 Постоялец

    Регистр.:
    23 июл 2012
    Сообщения:
    124
    Симпатии:
    31
    сильных навыков работы с curl не имею. Помогите пожалуйста передать значение логина/пароли, или если можно подскажите где можно подучиться работать с сurl, например на книги, или сайт со статьями
     
  4. BDSG

    BDSG

    Регистр.:
    28 фев 2009
    Сообщения:
    203
    Симпатии:
    109
    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$inputsPREG_SET_ORDER );



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

        if( empty( 
    $input] ) ){

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

    // тут задаём логин и пароль.. поля вынуты из формы
    $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, форумы, гугл, пробы, ошибки, свои проекты, т.п...
     
    Последнее редактирование: 31 авг 2013
    gurugavr1986 нравится это.
  5. kentastik

    kentastik Писатель

    Регистр.:
    21 апр 2012
    Сообщения:
    3
    Симпатии:
    1
    кстати, сам всегда с этим тупил, сейчас использую вот эту статью с хабра http://habrahabr.ru/post/84683/ там есть скриптик в ней для автоматизации написания таких скриптов.
     
    Casper_R нравится это.
  6. Bogdan1975

    Bogdan1975 Создатель

    Регистр.:
    28 ноя 2012
    Сообщения:
    48
    Симпатии:
    6
    Вопрос к ТС: получилось залогиниться? Я раз 5 подходил к этой проблеме - ни разу не получилось
     
  7. maxy666

    maxy666 Постоялец

    Регистр.:
    23 июл 2012
    Сообщения:
    124
    Симпатии:
    31
    к сожалению нет, юзал сайт http://har2php.sharecoder.com/ по совету kentastik, сайт не плохой, но ничего не получилось(внизу пример кода который выдал данный сайт)
    немного разобрался с сurl по совету книги Котерова, большое спасибо за книгу BDSG, но к сожалению с вашем кодом не разобрался, пробую писать что то свое...немного потренировался на простых сайтах...но аукро мне не поддалось(((

    Построил алгорит работы авторизаци(возможно и неверный, поправьте если что:(
    1. Заходим на страницу https://ssl.aukro.ua/fnd/authentication/ получаем из нее токены и значение других полей:
    "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($chCURLOPT_URL'https://ssl.aukro.ua/fnd/authentication/');
    curl_setopt($chCURLOPT_SSL_VERIFYPEER'false');
    curl_setopt($chCURLOPT_USERAGENT'Mozilla/5.0 (Windows NT 6.1; rv:24.0) Gecko/20100101 Firefox/24.0');
    curl_setopt($chCURLOPT_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($chCURLOPT_ENCODING'gzip, deflate');
    curl_setopt($chCURLOPT_COOKIEJAR$cookie_file);
    curl_setopt($chCURLOPT_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($chCURLOPT_HTTPHEADER$header);
    curl_setopt($chCURLOPT_POSTtrue);

    $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($chCURLOPT_POSTFIELDSimplode('&'$fields));
    curl_setopt($chCURLOPT_FOLLOWLOCATIONtrue);
    curl_setopt($chCURLOPT_AUTOREFERERtrue);
    curl_exec($ch);
    curl_close($ch);"
     
  8. Sercib

    Sercib Создатель

    Регистр.:
    2 май 2008
    Сообщения:
    19
    Симпатии:
    1
    Что бы залогиниться (не конкретно на аurko.ua) нужно принимать куки и проверять редиректы. А для начала нужно проверить саму форму логина, там могут быть разные парметры которые генерируются ява-скриптами. Но не проходимых защит нет - есть те над которыми нужно чуток посидеть. Конечно такие варианты лучше делать не на Curl, а самому вручную строить запросы.
     
Статус темы:
Закрыта.