![]() |
авторизация вконтакте
Начал писать скрипт для контакта, но тут же встал затык с авторизацией:
#!/usr/bin/python import cgi import urllib2 import Cookie import md5 def main(): print "Content-type: text/html\n" id = подставь id name = подставь мыло passw = подставь пароль md5passw = md5.new(passw) url = 'http://vkontakte.ru/id' + id req = urllib2.Request(url) req.add_header = ('User-Agent', "Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)") req.add_header('Cookie', "remixpass=" + md5passw + ";remixemail" + name + ";remixmid" + id) f = urllib2.urlopen(req) print f.read() main() Благодарю за ценный совет. |
Без remixsid авторизоваться не получится, поэтому шли пост запрос к серверу на авторизацию
|
типо такого? У меня не работает. Вываливает страницу с авторизацией, но значения не передает.
data = {'email':name, 'pass':passw} params = urllib.urlencode(data) url = 'http://vkontakte.ru/login.php' req = urllib2.Request(url, params) req.add_header = ('User-Agent', "Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)") f = urllib2.urlopen(req) print f.read() |
господа, кто-то может подсказать, что не так? Очень хочется разобраться.
|
Цитата:
|
Не. Капчи на логине не видел(((
|
Видимо контакт отдает кукисы и редиректит. Скрипт кукисы отбрасывает и следует по редиректу, в результате получаешь ответ в виде страницы авторизации
|
эм... это идея! Надо попробовать скормить странице с логином те же куки, что приходят по запросу главной страницы вместе с постом
|
Добрался сегодня вечером до скрипта. Нифига. Получаю куки от страницы login.php, скармливаю их же, но уже с постом авторизации. Так вообще страницу не грузит... токмо без кук.
|
Какой пост авторизации после получения кукисов если ты кукисы с пост запроса должен получить и использовать их для перехода по внутренним страницам
|
ща пробанем.
Странные какие-то куки: remixlang=1; expires=Thu, 18-Mar-2010 20:02:53 GMT; path=/; domain=.vkontakte.ru, remixchk=5; expires=Sat, 20-Mar-2010 22:32:00 GMT; path=/; domain=.vkontakte.ru, remixchk=5; expires=Sat, 27-Mar-2010 22:27:53 GMT; path=/; domain=.vkontakte.ru, remixchk=5; expires=Fri, 12-Mar-2010 18:03:06 GMT; path=/; domain=.vkontakte.ru |
пипец. сменили пароль к моей анкете... Не могу авторизироваться. Хотя, анкеты есть
|
rudra,
Шлёшь log + pass на login.php Если всё окей - то он сделает редирект (302, location), тогда можешь забирать куку. Если редирект не сделал, то либо капча, либо вообще лог+пасс кривой. Теперь насчёт куки - remixsid уже месяца 3-4 обязательный параметр в куках, а вот всё остальное - мусор (ну, за исключением тех случаев, когда нужно стырить акк). Так что можешь смело брать только remixsid, его вообще можно один раз получить и год пользоваться. Пока пасс, конечно, старый ;) ___ дополнение: можно быстро чекать приготовленные куки очень быстрым способом: обращаться к vkontakte.ru с кукой, после чего смотреть, идёт ли 302 с location или нет ;) скорость + экономия + акк в он-лайн не вылетает, что тоже важно (при запросе vkontakte.ru с правильной кукой делается редирект на profile.php (он же idX)). |
ага. Принцип ясен. Я постом получаю с логин.пхп куку с remixsid и дальше скармливаю ее, например, странице своей анкеты.
Спасибо. Буду пробовать написать такое. Когда получится, выложу сорцы |
http://forum.devisible.ru//showthread.php?t=297
посмотри тут мой бот. Только парсинг страници фигово реализовал (с ошибкой) и для аостинга надо куча данных |
Скандалы интриги расследования??? ппц код в первом посте, я пока не в cgi, переделать труда не составит думаю.
PHP код:
|
жирок!
|
добрался до отправки запроса на дружбу. Вот код хтмл: <li><a href="mail.php?act=write&to=2300774">Отправ ть сообщение</a></li><li><a href="friend.php?id=2300774">Друзья Женечки</a></li><li><a href="#add" onclick="addToFriend(2300774); return false;">Добавить в друзья</a></li>
Из этого сделал вывод, что запрос на авторизацию должен выглядеть вот так: "http://vkontakte.ru/addToFriend(" + id + "); return false;" Но в результате не видно вот той шняги, которую только недавно ввели и где есть кнопка "добавить" |
onclick="addToFriend(2300774); return false;"
Это е надо приписывтаь к урлу. Это javascript. Смотри запрос, напрмиер, плагином live http headers для firefox |
интересный плагин. Вот какой результат:
1. Запрос при запросе на дружбу(который открывает окошко): POST /friend.php act=a_add_form&fid=795186 2. Запрос при отправки формы из окошка: POST /friend.php act=addFriend&fid=795186&h=1367d519&first_name=%D0 %AE%D0%BB%D0%B8%D1%8F&last_name=%D0%A0%D0%B0%D0%B5 %D0%B2%D1%81%D0%BA%D0%B0%D1%8F&sex=%D0%B0&message= Privet Я думаю, что можно сразу использовать второй запрос. Получается: /friend.php act=addFriend&fid=IDЖЕРТВЫ&h=1367d519&first_ name=ИМЯ&last_name=ФАМИЛИЯ&sex=ПОЛ&me ssage=МЕССАДЖ_КАМРАДУ Но одна непонятка. Что это за число? 1367d519 Просто рандомное??? Не совсем рандомное. Каждому юзеру идет свое. И при повторе запроса оно одинаковое. |
Могу смело заявить что параметр sid в куках можно обходить,если знать как.Это просто к сведению.Скрипт работает уже больше полугода,и пока что все работает.Генерирую кукисы сам,ну а затем по мелочи.имха.
|
m0Hze,
Sid - алгоритмизационный параметр? |
господа хакеры, объясните начинающему как такое может быть
addEx = re.compile(r'(\w+aeb)') for m in re.finditer(addEx, response): num = m.start() print response[num-20:num+20] Выдает: \" id=\"h\" value=\"b41aeb7a\">\n < где b41aeb7a искомый номер Теперь я знаю что искать. Беру поиск чтобы получить это число: addEx = re.compile('(?<=value=\\\")\w+') hits = addEx.findall(response) print hits Но в результате ничего не получаю!!! Это как? |
А я так логинюсь:
PHP код:
|
так это ж тоже самое...
|
мой вариант немного легче :)
|
эт, конечно, хорошо. Но как достучаться до значения value? Из этой же формы id найти можно, кстати
|
PHP код:
в итоге у тебя в S остаётся только начение value |
не понял. Можешь объяснить? Есть в форме поле value. Найти его значение не могу. Значение id из той же формы находится. Для поиска значения юзаю:
addEx = re.compile('(?<=value=)\w+') hits = addEx.findall(response) print hits ЗЫ: ща попробую |
response = str(urllib2.urlopen(req).read())
s = responce.replace('\" id=\"h\" value=\"', '') s = s.replace('\">\n <', '') print s вот так вообще не работает |
Если ты точно мужду чем находится искомое значение то тупо отбрось лишнее через replace(). Я делал замену текста на пустое значение, то есть - просто удалял лишнее.
|
а! Так в том-то и беда! Я когда беру вот это значение из формы и вбиваю руками, оно его находит. А когда я беру имя поля, в котором должно быть это значение, то поле оказывается пустым.
|
Такой вопрос ,может кто то сталкивался:Допустим шлю пост запрос через прокси получаю в ответ заголовок с куками.Так вот если я буду для ускорения процесса слать уже гет с нужными куками без прокси капчу будет выкидывать или нет?
|
_nic,
Что в конечном итоге надобно получить? Если кука есть - то и логиниться не нужно. А следовательно, и GET делать не нужно. Такая вот логика, если вопрос рассматривать так, как он описан. |
Я все ясно написал.Шлю пост с мылом\паролем через прокси ,если верно получаю ответ с редиректом и куками.Потом шлю гет что бы получить инфу о анкете.Так вот если гет будет идти не через прокси,то будет капчу кидать после допустим 1000го раза, или нет?
|
Вернемся к баранам. Все хорошо кроме одного. Не могу выципить из формы приглашения имя и фамилию, если они кириллицей написаны. Латиницей ок, а кириллицей йок.
Попробовал сделать вот так: ru = lambda x: unicode(x,'cp1251') test = ru(response[500:700]) addEx = re.compile('(?<!<\/a>)\w+') hits = addEx.findall(test) print hits Все равно не видит русского имени |
заработало! Все ок. Приглашает.
хехе. Рано я обрадовался. Ошибка безопасности, нах. |
господа, нужна ваша помощь. Есть ссылочка на добавление в друзья. Когда ее выполняю просто в браузере, то все норм, когда отсылаю скриптом, то ошибка безопастности. Смотрел через файерфокс хттп_заголовки, но там ничего более не передается. Сегодня днем еще через скрипт все срабатывало. Кто может подсказать, что не верно я контакту скармливаю:
url = 'http://vkontakte.ru/friend.php?act=addFriend&fid=795186&h=1367d519&fir st_name=%D0%AE%D0%BB%D0%B8%D1%8F&last_name=%D0%A0% D0%B0%D0%B5%D0%B2%D1%81%D0%BA%D0%B0%D1%8F&sex=%D0% B0&message=' req = urllib2.Request(url) req.add_header("Referer", "http://vkontakte.ru/search.php?q=%E4%EC%E8%F2%F0%E8%E9+FX&act=quick") req.add_header("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5") response = str(urllib2.urlopen(req).read()) |
вот. Родил. Мой первый скрипт в веб-программинге. Работает :)
#!/usr/bin/python import cgi import urllib import urllib2 import re import cookielib import time def loginContact(nickname, password): cookie = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(c ookie)) urllib2.install_opener(opener) headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.01; Widows NT)'} data = {"email":nickname, "pass":password} sendData = urllib.urlencode(data) req = urllib2.Request("http://vkontakte.ru/login.php", sendData, headers) try: vk = str(urllib2.urlopen(req).info()) except: cookie = status = "ERROR" return cookie, status else: if "remixsid=deleted" in str(vk): status = "NO" return cookie, status else: status = "YES" return cookie, status def openSearch(): searchURL = "http://vkontakte.ru/search.php?q=%EA%E8%E5%E2&act=quick" req = urllib2.Request(searchURL) response = str(urllib2.urlopen(req).read()) addEx = re.compile('(?<=addToFriend\()\w+') ids = addEx.findall(response) return ids def addFriend(ids): urlArray = [] for id in ids: friendURL = "http://vkontakte.ru/friend.php?act=a_add_form&fid=" + id urlArray.append(friendURL) for urlNum in range(1, len(urlArray)): searchURL = urlArray[urlNum] req = urllib2.Request(searchURL) response = str(urllib2.urlopen(req).read()) addEx = re.compile('(?<=\")\w+') hits = addEx.findall(response[850:950]) for i in range(0, len(hits)): if hits[i] == 'h' and hits[i + 1] == 'h': value = hits[i + 2] break addEx = re.compile('(?<!<\/a>)\w+', re.UNICODE) hits = addEx.findall(response[500:700]) for i in range(0, len(hits)): if hits[i] == ids[urlNum]: firstName = hits[i + 1] lastName = hits[i + 2] break url = 'http://vkontakte.ru/friend.php?act=addFriend&fid=' + ids[urlNum] + '&h=' + value + '&first_name=' + firstName + '&last_name=' + lastName + '&sex=&message=' req = urllib2.Request(url) urllib2.urlopen(req).read() time.sleep(2.5) return responce def main(): print "Content-type: text/html\n" inputValue = cgi.FieldStorage() name = inputValue["name"].value passw = inputValue["pass"].value go = loginContact(name, passw) if go[1] == 'YES': addFriend(openSearch()) main() |
авторизацию замудрили пипец, кто ни будь на пхп замутит?
|
| Время: 07:29 |