Найти - Пользователи
Полная версия: авторизация desktop приложения vk.com
Начало » Web » авторизация desktop приложения vk.com
1 2
Spectral
Добрый вечер, возник следующий вопрос:
Вот тут написано(http://vk.com/developers.php?o=-1&p=%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F+Desktop-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9), что для того, чтобы авторизовать приложение, необходимо отправить post-запрос, содержащий app_id приложения, методы layout и type.
после открытия урла идет редирект на уникальный url, содержащий параметры для открытия сессии и авторизации приложения.

пишу вот такой код:
import httplib, urllib

conn = httplib.HTTPConnection("vkontakte.ru")
conn.request("POST",'/login.php?app=1978144&layout=popup&type=browser')
response = conn.getresponse()
print response.status, response.reason

print response.getheaders()
conn.close()
получаю вот такие заголовки:
Заголовка с указанием параметров для сессии приложения нету.
В то же время, плагин для файрфокса Live Http Headers показывает все заголовки:

http://vkontakte.ru/api/login_success.html#session=%7B%22mid%22%3A4751778%2C%22sid%22%3A%2229b040143e57462c3cf4155752c31fbec187e761b2b656ba11ea0afe1f%22%2C%22secret%22%3A%228baa54b58a%22%2C%22expire%22%3A0%2C%22sig%22%3A%2274b36b73bdee58e997349f20f3c2a7f2%22%7D

GET /api/login_success.html HTTP/1.1
Host: vkontakte.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; ru; rv:1.9.2.10) Gecko/20100914 MRA 5.7 (build 03686) Firefox/3.6.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Cookie: remixchk=5; remixclosed_tabs=0; remixnews_privacy_filter=0; remixlang=0; wysiwyg=1; remixnews_privacy_filter_idols=0; remixsettings_bits=1; audio_vol=22; remixsid=6169dc50ea8d913b88cb694205607e4770144993ddfbf616ad091297
If-Modified-Since: Tue, 25 May 2010 18:46:28 GMT
Cache-Control: max-age=0

HTTP/1.1 304 Not Modified
Server: nginx/0.7.59
Date: Sun, 10 Oct 2010 20:10:53 GMT
Last-Modified: Tue, 25 May 2010 18:46:28 GMT
То есть имеется нужный заголовок.
Так как же сделать питоном так, чтобы получить этот нужный заголовок?
Буду признателен за подсказки…
Может тут какая-то привязка конкретно к моему app_id, которое я зарегистрировал со своего аккаунта на vkontakte.ru?
dimabest
По-моему для разработчиков все понятно написано:

"В случае успешной авторизации браузер пользователя будет перенаправлен на страницу http://vkontakte.ru/api/login_success.html и в идентификаторе URI-фрагмента (якорной ссылке) будет передана информация о сессии в формате JSON.
….

при успешной авторизации встроенный в приложении браузер будет перенаправлен на следующий URL-адрес:

vkontakte.ru/api/login_success.html#session={“mid”:66748, “sid”:“ea56492j61334be88e2e8e1dccd21ef8d2f4606f26add88b2e1ee313e2”, “secret”:“733mf8a8c5”, “expire”:0, “sig”:“f7afd3db2d3a8a08c849bb038fd52173”}"
Spectral
Не поверите, но для меня тоже все понятно написано :)
Проблема в том, чтобы сделать так, чтобы сервер vk не отличил мой скрипт от браузера и все-таки отдал location-header(именно в этом заголовке отображаются mid, sig, etc.) мне. То что они в формате json, роли не играет - надо просто будет распарсить через json - библиотеку питона. Вопрос в другом - как же все-таки заполучить этот заголовок.
Александр Кошелев
Может быть дело в том, что запрос вы даете POST, а параметры сериализуете в GET query strung?
Spectral
Имеете ввиду так надо было писать запрос?
# -*- coding: UTF-8 -*-

import urllib
import urllib2

APP_ID='1978144'
LOGIN_URL='http://vkontakte.ru/login.php?'
params={'app' : APP_ID, 'layout':'popup' , 'type':'browser'}
params = urllib.urlencode(params)
f = urllib2.urlopen(LOGIN_URL, params, timeout=1)
# получаем http-заголовок с cookies:
print f.info()
Ничего не изменилось…
Александр Кошелев
какой статус ответа? что в теле?
Spectral
Возвращает вот это:
Server: nginx/0.7.59
Date: Mon, 11 Oct 2010 09:12:23 GMT
Content-Type: text/html; charset=windows-1251
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.2.6-1+lenny4
Pragma: no-cache
Cache-control: no-store
Set-Cookie: remixchk=5; expires=Wed, 19-Oct-2011 13:24:51 GMT; path=/; domain=.vkontakte.ru
Vary: Accept-Encoding
Как посмотреть статус через urllib2, я как-то не смог найти в манах(потому и писал первоначальный скрипт в httplib).
Александр Кошелев
Попросите ещё f.geturl()
Spectral
гм…
Выдало ссылку http://vkontakte.ru/login.php?

видимо, надо еще написать авторизацию как пользователя vk.com, получить какой-то cookie
а запрос на авторизацию приложения послать вместе с этим cookie…
Spectral
Что-то вообще запутался, что нужно сделать.
На странице про авторизацию приложения ничего не сказано про авторизацию пользователя…
Не мог бы кто-нибудь рассказать все же, как тут быть?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB