Помощник
|
Задача про Curl |
sergsam1
|
Сообщение
#1
|
||
|
|
||
|
|||
Lordie |
23.11.2009, 21:49;
Ответить: Lordie
Сообщение
#2
|
|
sergsam1, отсылаем user & password по POST, получаем ID сессии - дальше топаем и делаем что хотим, подписываясь уже сессией.. 0о
Ps: сами просили сказать, а не написать кодом = ) |
|
|
sergsam1
|
Сообщение
#3
|
|
sergsam1, отсылаем user & password по POST, получаем ID сессии - дальше топаем и делаем что хотим, подписываясь уже сессией.. 0о Ps: сами просили сказать, а не написать кодом = ) Ну если вы напишите, я конечно не обижусь) Там дело в том что в пост запросе нужна еще переменная rnd, случайное число. Вот что надо отправлять user=$login&password=$pass&rem=1&a=2&ajax=1&rnd=123 Сообщение отредактировал sergsam1 - 23.11.2009, 22:10 |
|
|
Lordie |
23.11.2009, 22:10;
Ответить: Lordie
Сообщение
#4
|
|
sergsam1, тогда парсим саму форму логина, в которой по характерному имени идентификатора submfrmLgrnd запросто определяем сам rnd
|
|
|
sergsam1
|
Сообщение
#5
|
|
sergsam1, тогда парсим саму форму логина, в которой по характерному имени идентификатора submfrmLgrnd запросто определяем сам rnd Вобщем я делаю так, сначала иду GET запросом на главную страницу, парсю rnd. Следующим сеансом curl я пытаяюсь отослать post запрос, с логином, паролем и rnd, но похоже что rnd имеет уже другое значение. Надеюсь понятно объяснил. |
|
|
Lordie |
23.11.2009, 22:22;
Ответить: Lordie
Сообщение
#6
|
|
...aka, нужно сразу отпарсить и сразу же выслать запрос... что невозможно по определению.
На самом деле все куда реальнее - сразу получаем сессию, при отправке POST подписываемся той же сессией - и все работает с тем же rnd. |
|
|
sergsam1
|
Сообщение
#7
|
|
...aka, нужно сразу отпарсить и сразу же выслать запрос... что невозможно по определению. На самом деле все куда реальнее - сразу получаем сессию, при отправке POST подписываемся той же сессией - и все работает с тем же rnd. Щас буду пробовать. Чо то я никак не врублюсь, сессию как получить, нужно парсить HTTP заголовки чтоли, я использую вот это CURLOPT_COOKIEJAR, CURLOPT_COOKIEFILE не помогает никак. Сообщение отредактировал sergsam1 - 23.11.2009, 22:54 |
|
|
Ghost Bear |
24.11.2009, 5:44;
Ответить: Ghost Bear
Сообщение
#8
|
|
Лучшим решением будет доставать из заголовков нужные куки, сохранять их где-то и после авторизации их всегда отправлять вместе с запросами. После отправки запроса на авторизацию, вернутся Set-Cookie заголовки, в одном из которых будет сессия. Чтобы получать заголовки курлом, надо поставить CURLOPT_HEADER на 1. Заголовки от контента отделяются двумя переводами строки (\r\n\r\n)
Сообщение отредактировал Ghost Bear - 24.11.2009, 5:44 |
|
|
Grand |
24.11.2009, 7:00;
Ответить: Grand
Сообщение
#9
|
|
Лучшим решением будет доставать из заголовков нужные куки, сохранять их где-то и после авторизации их всегда отправлять вместе с запросами. После отправки запроса на авторизацию, вернутся Set-Cookie заголовки, в одном из которых будет сессия. Чтобы получать заголовки курлом, надо поставить CURLOPT_HEADER на 1. Заголовки от контента отделяются двумя переводами строки (\r\n\r\n) curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); а ваще вот root@wonderland:~# cat /storage/content/tmp/t.php <? $ua="Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.15) Gecko/2009101601 MRA 5.5 (build 02842) Firefox/3.0.15"; $cookie="tmp.tmp"; #петтинг $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://victu.clan.su/"); curl_setopt ($ch, CURLOPT_TIMEOUT, 20); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_HEADER, 1); curl_setopt ($ch, CURLOPT_USERAGENT, $ua); curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); $page = curl_exec($ch); curl_close($ch); preg_match("!value=\"(.*?)\" name\=\"rnd\"!si",$page,$gg); $rnd=$gg[1]; #проникновение $postdata="user=ebatoriya%40grand.od.ua&password=1234567xz&rem=1&a=2&ajax=1&rnd=$rnd"; $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://victu.clan.su/index/sub/"); curl_setopt ($ch, CURLOPT_TIMEOUT, 20); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_HEADER, 1); curl_setopt ($ch, CURLOPT_USERAGENT, $ua); curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $page = curl_exec($ch); curl_close($ch); #тест $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://victu.clan.su/index/14"); curl_setopt ($ch, CURLOPT_TIMEOUT, 20); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_HEADER, 1); curl_setopt ($ch, CURLOPT_USERAGENT, $ua); curl_setopt ($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); $page = curl_exec($ch); curl_close($ch); echo "$page"; ?> результаты http://grand.od.ua/share/tmp/t.php конечно все это можно сделать красивее, но как показывает практика-главное результат |
|
|
sergsam1
|
Сообщение
#10
|
|
Grand, делал все примерно также:
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt'; $reffer = "http://ya.ru/"; $uname = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.1.5) Gecko/20091102 AdCentriaIM/1.7 Firefox/3.5.5 (.NET CLR 3.5.30729)'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://victu.clan.su/"); curl_setopt($ch, CURLOPT_REFERER, $reffer); curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); curl_setopt($ch, CURLOPT_USERAGENT, $uname); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); if (preg_match("/name=\"rnd\" value=\"([0-9]{1,5})\"/", $result, $out)) $rnd = $out[1]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://victu.clan.su/index/sub/"); curl_setopt($ch, CURLOPT_REFERER, $reffer); curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); curl_setopt($ch, CURLOPT_USERAGENT, $uname); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "user=ebatoriya%40grand.od.ua&password=1234567xz&rem=1&a=2&ajax=1&rnd=$rnd"); $result = curl_exec($ch); curl_close($ch); echo $result; Выходит почему то пустая страница. А вот если потом: $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://victu.clan.su/index/14"); curl_setopt($ch, CURLOPT_REFERER, $reffer); curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); curl_setopt($ch, CURLOPT_USERAGENT, $uname); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); curl_close($ch); echo $result; То все ок! Сообщение отредактировал sergsam1 - 24.11.2009, 15:14 |
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Форум про уток - на новом домене Форум про уток на новом домене - utkamir.ru |
0 | artmeteor | 631 | 13.4.2024, 18:26 автор: artmeteor |
|
"Извините, что ожидание затянулось, но не думайте, пожалуйста, что мы про вас забыли. Мы заводим задачи по всем обращениям и контролируем работу над ними самым тщательным образом." Вопрос |
0 | kuz999 | 1252 | 5.2.2024, 14:06 автор: kuz999 |
|
Сайт дроп про авто посещаемость 15-20 | 3 | tbr82 | 2765 | 14.9.2019, 21:16 автор: tbr82 |
|
Медицинский сайт про псориаз дроп | 0 | tbr82 | 1390 | 13.9.2019, 17:03 автор: tbr82 |
|
Создание сайтов любой сложности (фреймворки, CMS), Верстка (адаптивная, простая, лендинг), шаблоны, скрипты, любая задача | 21 | ZaDrotom | 15925 | 1.7.2019, 0:33 автор: stando82 |
Текстовая версия | Сейчас: 26.4.2024, 7:24 |