Привет, подскажите каким образом может генерироваться кукис при авторизации на сайте? Пишу прогу, которая будет логиниться на сайт и парсить некоторую инфу. По шагам: Логинюсь на сайт, параллельно смотрю снифером какие заголовки и POST данные передаются. Делаю POST запрос на сайт с абсолютно точно такими же заголовками и POST данными, но в ответ получаю какие-то "неправильные" кукисы, которые естественно сервер не принимает и не авторизовывает. Для примерна, когда логинюсь браузером, то получаю вот такие кукисы: После посылки пост запроса программой, мне возвращаются вот такие кукисы: В первом кукисе есть вот такой вот кусочек: "client_res=1280x1024". То есть кукисы как-то редактируются толи жабаскриптом, толи хз как. И вот собственно вопрос, как можно получить нормальный кукис ?
Определяются серверным скриптом + javascript скорее всего и потом прописываются в куки после авторизации, причем здесь пост запрос, от человека будут требовать в пост запросе его разрешение экрана? Смешно
Каким образом можно узнать эту инфу, которая записывается в кукисы и передать ее серверу, чтобы он ее принял?
Да разрешение это фигня, там тем более в передаваемом заголовке Cookie еще много чего непонятно откуда взявшегося, например mrcu
Шлешь на сервак запрос для авторизации с паролем и логином - в ответ получаешь куки, и далее все запросы на сервак шлешь вместе с этими куками
Ага, полностью согласен, два запроса, первый - авторизация и получение кук, второй - поход на нужную страницу, и не париться, откуда и что тебе в куки вставляют, просто получить Вот пример авторизации на ачаде, именно этот пример показывает, что нам пофигу, что там в куки пишется и откуда это берется: PHP: <?php $user = 'Pashkela'; $pass = md5('лолохоцкер123$!#--?'); // Раззззз....... $cl = curl_init('/login.php?vb_login_username='.$user.'&vb_login_password=&cookieuser=1&s=&do=login&forceredirect=1&vb_login_md5password='.$pass); curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($cl, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); curl_setopt($cl, CURLOPT_REFERER, '/'); curl_setopt($cl, CURLOPT_HEADER, 1); curl_setopt($cl, CURLOPT_COOKIEJAR, 'coockie.txt'); $ex = curl_exec($cl); curl_close($cl); // Два...... $exec = curl_init('/index.php'); curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1); curl_setopt($exec, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); curl_setopt($exec, CURLOPT_REFERER, '/'); curl_setopt($exec, CURLOPT_HEADER, 1); curl_setopt($exec, CURLOPT_COOKIEFILE, 'coockie.txt'); $page = curl_exec($exec); curl_close($exec); preg_match('#<div class="bigusername">(.*)</div>#',$page,$username); preg_match('#\(<b>(.*)<\/b>\/(.*)\)#',$page,$messg); echo 'У пользователя <b>'.$username[1].'</b> '.$messg[0].' сообщений.'; ?> зачем создавать отдельную тему - непонятно, таких вопросов миллион (как и ответов) по форуму
Это все понятно. Только дело то в том, что ответный заголовок вот такой: а дальше на сервер посылаются заголовки с кукисами, где от ответного заголовка только PHPSESSID и uid (как видно из первой цитаты первого поста), и куча параметров которые беруться непонятно откуда, видимо яваскриптом, но среди всех яваскриптов, которые я там увидел, яваскрипта, который хотябы будет разрешение брать я не нашел, кроме счетчика, или скрипта который будет изменять кукисы: document.cookie
Вы вопроса не догоняете видимо. Кароче смысл - во многих крупных проектах авторизация не так проста как кажется, благодаря js, который дает дополнительные параметры для создания сессии, и соответственно логин без них не проходит.Например данные передаются аяксом(каждый раз могут быть уникальными(соответственно 2 раза их послать уже нельзя). Столкнулся с этой проблемой сам, не так давно. Вообщем сразу к решению: 1) Если парсер пишешь(ну или что ты там делаешь) под один проект, то можно рассматривать джаваскрипты, как они создают эти уникальные ключи, куда отсылают и прочее. Однако часто они обфускации подлежат, да и криптуют + сжимают, что разобраться с ними порой не выгодно. Овчинка выделки не стоит, как говорят. Тогда на этот случай есть 2 решение. 2) Решение 2, юзать готовые браузеры,т.к. в них есть js, причем их DOM полюбому поддерживает проект. Здесь тоже куча вариантов, берешь IE или gecko движек и вперед.Но тут уж скриптами не обойдешься.
2TC Учите пхп, в нем все написано, это для 2 сервера, с небольшими изменениями будет работать и с первым: PHP: //=================================== $login='логин'; $pass='пароль'; //=================================== @set_time_limit(0); @ini_set("max_execution_time", 0); $cookie=array(); function post($url='',$content='',$referer='') { GLOBAL $cookie; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208'); if (!empty($cookie)) curl_setopt($ch, CURLOPT_COOKIE, implode('; ',$cookie)); if (!empty($content)) {curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $content);} else {curl_setopt($ch, CURLOPT_POST, 0);} if (!empty($referer)) curl_setopt($ch, CURLOPT_REFERER, $referer); $ss=curl_exec($ch); curl_close($ch); if (preg_match_all('#^Set-Cookie: (([^;=]+)=([^;=\r\n]+))#mi',$ss,$cook)) { if ($tmpcookie=array_combine($cook[2],$cook[1])) $cookie=(array)$tmpcookie + (array)$cookie; } return $ss; } post('http://g2.botva.mail.ru/login.php','server=2&email='.urlencode($login).'&email2=mail.ru&passWord='.urlencode($pass).'&b_msg_go2.x=47&b_msg_go2.y=27&main=','http://g2.botva.mail.ru/index.php'); echo post('http://g2.botva.mail.ru/index.php'); qBiN То что один человек сделал - другой завсегда сломать сможет. А полагаться на яваскрипты - это терять многих пользователей, кто ими не пользуется
В данном сабже про яваскрипты чушь. Вот рабочий скрипт авторизации на ботве на основании мною вышесказанного: PHP: <pre> <? @set_time_limit(0); @ini_set("display_errors","1"); $mail = ''; // Ваша почта на mail.ru, всё, что до @mail.ru $pass = '';// Пароль от почты // Раззззз....... АВТОРИЗАЦИЯ $cl = curl_init('http://g2.botva.mail.ru/login.php'); curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($cl, CURLOPT_POST, 1); curl_setopt ($cl, CURLOPT_POSTFIELDS, "server=2&email=$mail&email2=mail.ru&passWord=$pass&submit.x=94&submit.y=14"); curl_setopt($cl, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); curl_setopt($cl, CURLOPT_REFERER, 'http://g2.botva.mail.ru/index.php'); curl_setopt($cl, CURLOPT_HEADER, 1); curl_setopt($cl, CURLOPT_COOKIEJAR, 'coockie.txt'); $ex = curl_exec($cl); curl_close($cl); // Два...... ИДЁМ НА ЛЮБУЮ СТРАНИЦУ САЙТА, НО УЖЕ АВТОРИЗОВАННЫЕ $exec = curl_init('http://g2.botva.mail.ru/tour.php'); curl_setopt($exec, CURLOPT_RETURNTRANSFER, 1); curl_setopt($exec, CURLOPT_USERAGENT, 'Opera/9.25 (Windows NT 5.1; U; ru)'); curl_setopt($exec, CURLOPT_REFERER, 'http://g2.botva.mail.ru/login.php'); curl_setopt($exec, CURLOPT_HEADER, 1); curl_setopt($exec, CURLOPT_COOKIEFILE, 'coockie.txt'); $page = curl_exec($exec); curl_close($exec); echo $page; ?> </pre> ну и Gifts риспект, впрочем как и всегда (практически тоже самое, только оформленное в виде функции с небольшими изменениями в алгоритме) PS: Какие куки вы в итоге получили всегда можете посмотреть в файле, который создается автоматически в той же папке, где был запущен сам скрипт - coockie.txt все необходимые данные элементарно цепляются из tamper data (плагин для FireFox), что было уже озвучено выше. Итог: обычнейшая авторизация, ничем вообще не отличающаяся по сложности от авторизации на ачаде. Приведен пример авторизации на сервере g2, так как не мог зарегица на сервере g1, потому что он официально работает только до 1 ноября 2008 года.
Яхуу, всмысле yahoo.com посмотрю как ты настройки ящика будешь менять без js. Хороший пример я думаю.
перевести можно, но затратно. Долго пример искать не хочу, вот пример обфускованого кода, правда он тут не закодирован escape`ами и прочим. http://l.yimg.com/d/lib/bc/bc_2.0.4.js скрипт самый маленький, который нашел)
ну если ты не заметил, то этот скриптик используется для передачи данных о пользователе картинке по урлу http://us.bc.yahoo.com/b вот это вообще не понял, что ты написал. --- Это кажется все просто, пока не начнешь работать с этим.