За последние 24 часа нас посетили 38212 программистов и 1722 робота. Сейчас ищут 693 программиста ...

Как сделать дело cUrl'ом?

Тема в разделе "PHP для новичков", создана пользователем minux, 14 июл 2012.

  1. minux

    minux Активный пользователь

    С нами с:
    14 май 2012
    Сообщения:
    89
    Симпатии:
    1
    <?php
    $url = "http://passport.yandex.ru/passport?mode=auth"; //УРЛ, куда отправлять данные

    /*
    Переменные, которые мы будет отправлять Яндексу в виде POST запроса:
    */
    $login = 'qtej346'; //Логин
    $passwd = '1062656'; //Пароль
    $user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; //Полный путь до файла, где будем хранить куки
    $idkey = '3121235564020nVDfxvth2'; //Хрен знает что
    $retpath = 'http://webmaster.yandex.ru/'; //Откуда мы пришли на страницу авторизации
    $timestamp = ''; //Хрен знает что
    $twoweeks = 'yes'; //Две недели какие-то
    $In = 'Войти'; //Кнопка входа

    /*
    Функция:
    */
    function auth($url) {
    global $user_cookie_file, $idkey, $retpath, $timestamp, $login, $passwd, $twoweeks, $In; // Получаем все POST данные
    /*
    Небольшая прелюдия с инифиализацией cURL и прочей шулухой
    */
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");

    curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Куки раз
    curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Куки два

    curl_setopt($ch, CURLOPT_POST,1); //Будем отправлять POST запрос

    /*
    Формируем и отправляем тот самый POST запрос.
    Как видите, это простая строка, мало чем отличающаяся от GET.
    */
    curl_setopt($ch, CURLOPT_POSTFIELDS,"idkey=$idkey&retpath=$retpath&timestamp=$timestamp&login=$login&passwd=$passwd&twoweeks=$twoweeks&In=$In");
    $html = curl_exec($ch);
    curl_close($ch);
    return $html; //Возвращаем ответ Яндекса
    }

    auth($url); // Авторизируемся.
    ?>
    функция
    <?php
    function browser($url) {
    $user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; //Получаем сохраненный после авторизации файл с куками.
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Подставляем куки раз
    curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Подставляем куки два
    $html = curl_exec($ch);
    curl_close($ch);
    return $html; //Возвращаем ответ
    }
    echo browser('http://narod.yandex.ru/'); //Безпрепятственно выводим заветную инфу
    ?>

    авторизация удалась.
    Вижу страницу narod.yandex.ru
    Как тыкнуть кнопку "создать сайт?"



    <a href='http://originaldiplom.info/купить-диплом-в-санкт-петербурге/'>купить диплом в спб недорого</a>

     
  2. georgela

    georgela Активный пользователь

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    Re: Помогите залогиниться cUrl'ом

    Качай Snoopy.class.php
     
  3. minux

    minux Активный пользователь

    С нами с:
    14 май 2012
    Сообщения:
    89
    Симпатии:
    1
    Уж понял, что cUrl это не file_get_contents('http://site.ru');
     
  4. georgela

    georgela Активный пользователь

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    Snoopy-класс на php который имитирует браузер с куками post методом возможностью присоединять файл и гораздо удобнее CURL
     
  5. minux

    minux Активный пользователь

    С нами с:
    14 май 2012
    Сообщения:
    89
    Симпатии:
    1
    include('Snoopy.class.php'); // подключаем «Snoopy»
    $snoopy = new Snoopy(); // создаём объект
    $post_array = array();
    $post_array['login'] = 'nufal548';
    $post_array['passwd'] = '1257765';
    #$snoopy->cookies['last_visit'] = 1298295000;
    $snoopy->cookies['login'] = 'nufal548';
    $snoopy->agent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; uk; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 Some plugins";
    $snoopy->referer = "http://yandex.ru";
    $snoopy->rawheaders["Host"] = "yandex.ru"; // Если сервер проверяет Host
    $snoopy->maxredirs = 100; // Максимальное количество редиректов
    $snoopy->submit('http://yandex.ru', $post_array); // отправляем форму
    echo $snoopy->results; // выводим результат[/code]

    Не логинится :(
    Копаю гуглом, но по снупи еще хуже дела с мануалами :(

    Добавлено спустя 19 минут 48 секунд:
    Есть еще реггер. Регает почту. Может быть сюда получится вкрутить "создавалку narod.ru'ов"

    <?php
    set_time_limit(0);
    function post($url,$post,$refer) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.4) Gecko/2008102920 AdCentriaIM/1.7 Firefox/3.0.4");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_REFERER, $refer);
    curl_setopt($ch, CURLOPT_COOKIEJAR, "./cook");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "./cook");
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    return $result;}
    function nik(){
    $chars="eyuioa";
    $buk='qwrtpasdfg0hjklzxcvbnm';
    $max=2;
    $gl=StrLen($chars);
    $sogl=StrLen($buk);
    while($max--) $nik.=$buk[rand(0,$sogl)].$chars[mt_rand(0,$gl)];
    $nik.=$buk[rand(0,$sogl)].rand(111,777);
    return $nik;}
    $login.=nik();
    $name=rand(0,7777777);
    $password = rand(0,7777777);
    if($_POST['captcha'])
    {$result = post('http://passport.yandex.ru/passport?mode=register&ncrnd='.$_POST['ncrnd'],'idkey='.$_POST['idkey'].'&step=two&filled=yes&login='.$_POST['login'].'&fname='.$_POST['name'].'&iname='.$_POST['name'].'&time='.time().'&passwd='.$_POST['password'].'&passwd2='.$_POST['password'].'&hintq=1&udhintq=&hinta=OTVET&hintasave=OTVET&questnum=1&hintqsave=&email=&phonenumber=&code='.trim($_POST['captcha']).'&agreed=yes', 'http://passport.yandex.ru/passport?mode=register&ncrnd='.$_POST['ncrnd']);
    if (preg_match('#or">(.*?) н#i',$result,$bad_capt))
    {echo '<script>alert(\'Не правильный код!\')</script>';}
    else{
    $fh = fopen('yandex.txt', "a+");
    $success - fwrite($fh, $_POST['login'].'@yandex.ru:'.$_POST['password']."\r\n");
    fclose($fh);
    unset($_POST['captcha']);}
    Header('Location: index.php');
    exit; } else
    {post ('http://passport.yandex.ru/passport?mode=logout',null,'http://passport.yandex.ru/');
    $result = post('http://passport.yandex.ru/passport?mode=register','step=two&filled=yes&fresh=&iname='.$name.'&fname='.$name.'&login='.$login.'&done=%C4%E0%EB%FC%F8%E5%A0%26%238594%3B','http://passport.yandex.ru/passport?mode=register&msg=mail&retpath=http://mail.yandex.ru');
    preg_match('#ncrnd=(.*?)"#i',$result,$ncrnd);
    preg_match('#idkey" value="(.*?)"#i',$result,$idkey);
    preg_match('#\?idkey=(.*?)"#i',$result,$captcha);
    /* Выводим форму для ввода капчи (в hidden передаём необходимые значения) */
    echo '<img class="captcha-img" name="captcha" src="http://passport.yandex.ru/digits?idkey='.$captcha[1].'" alt=""><br>
    <form name="captcha_form" action="index.php" method="POST">
    <input type="text" name="captcha" value="" /><br>
    <input type="hidden" name="ncrnd" value="'.$ncrnd[1].'" />
    <input type="hidden" name="idkey" value="'.$idkey[1].'" />
    <input type="hidden" name="name" value="'.$name.'" />
    <input type="hidden" name="login" value="'.$login.'" />
    <input type="hidden" name="password" value="'.$password.'" />
    <input type="submit" value="ok"></form>'; }
    ?>
     
  6. georgela

    georgela Активный пользователь

    С нами с:
    11 май 2011
    Сообщения:
    395
    Симпатии:
    0
    minux
    Должно работать.
    Посмотри в мозилле какие http переменные в заголовках передаются.Дело в том что кроме логина с пассом 99% передаются еще скрытые поля,которые нужны как раз для того чтобы не регались простым file_get_contents.

    Добавлено спустя 2 минуты 2 секунды:
    Мануал у него нормальный
    1)Сначала зайди на Яндекс и сохрани в Снупи кукисы!!!
    2)Сохрани скрытые переменные и попробуй имитировать действия юзера

    Добавлено спустя 1 минуту 18 секунд:
    Я так в Теле2 смски отсылал-сканчала заходил на форму с Теле2 смс,получал каптчу и отправлял её на антигейт,передавал все скрытые поля и у меня получилась штука для отправки СМС на Теле2
     
  7. minux

    minux Активный пользователь

    С нами с:
    14 май 2012
    Сообщения:
    89
    Симпатии:
    1
    Вот они:
    $idkey = '3121235564020nVDfxvth2'; //ай-ди кей блин :)))
    $timestamp = ''; //Хрен знает что
    $twoweeks = 'yes'; //Две недели какие-то (раньше была у яндекса галка "не спрашивать пароль 2 недели")
    $In = 'Войти'; //Кнопка входа
    = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
    Всё нужное присутствует, cUrl логинится. Вот функция:
    <?php
    function browser($url) {
    $user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; //Получаем сохраненный после авторизации файл с куками.
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
    curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Подставляем куки раз
    curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Подставляем куки два
    тут надо как-то научить курл нажимать по кнопке
    $html = curl_exec($ch);
    curl_close($ch);
    return $html; //Возвращаем ответ
    }
    echo browser('http://narod.yandex.ru/'); //выводим страницу с результатами
    ?>

    Кнопка, которую хочу нажать, выглядит так:
    <a class="b-button b-radius b-button-green b-gradient-green" href="http://narod2.yandex.ru/register/?retpath=http://narod2.yandex.ru/wizard/">Создать сайт</a>
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ничо что это ссылка? :D
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764