LINUX.ORG.RU

Desktop python CURL OAuth2

 , , ,


1

3

Я занимаюсь написанием desktop-приложения для работы с фотографиями с использованием языка программирование python.

Вопрос: для авторизации на сайте хочу использовать библиотеку pycUrl как мне это реализовать и что бы не надо было вызывать окно авторизации а использовать свое UI для авторизации.

Заранее спасибо !!!!

★★★★★

Последнее исправление: enep (всего исправлений: 2)

Вопрос: для авторизации на сайте хочу использовать библиотеку pycUrl

А почему не хочешь использовать requests + requests-oauthlib?

!!!!

Да не волнуйся ты так.

theNamelessOne ★★★★★
()
Ответ на: комментарий от enep

Не обращай внимания, это я немного не в тему сказал.

Тебе нужно будет вручную делать запросы к OAuth, заполнять формы, обрабатывать редиректы и пр. Попробуй с Mechanize.

theNamelessOne ★★★★★
()
Ответ на: комментарий от enep

Mechanize под питон тоже есть. В любом случае, никто не запрещает тебе вручную странички парсить и запросы отправлять.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Ну и макароны на этом вашем руби. Ужасный язык.

Вот простой пример mechanize+python:

import mechanize

project = "test"
baseurl = "http://trac.somewhere.net"
loginurl = "%s/%s/login" % (baseurl, project)
b = mechanize.Browser()
b.add_password(loginurl, "user", "secret", "some Realm")
b.open(loginurl)
Siado ★★★★★
()
Последнее исправление: Siado (всего исправлений: 1)

OAuth2

Не досмотрел сразу. Есть еще такая библиотека:

https://github.com/simplegeo/python-oauth2

import oauth2 as oauth

# Create your consumer with the proper key/secret.
consumer = oauth.Consumer(key="your-twitter-consumer-key", 
    secret="your-twitter-consumer-secret")

# Request token URL for Twitter.
request_token_url = "http://twitter.com/oauth/request_token"

# Create our client.
client = oauth.Client(consumer)

# The OAuth Client request works just like httplib2 for the most part.
resp, content = client.request(request_token_url, "GET")
print resp
print content
Siado ★★★★★
()
Ответ на: комментарий от Siado

спасибо. что то я плохо начал дружить с гуглом а mechanize клевая штука

enep ★★★★★
() автор топика
Ответ на: комментарий от Siado

решил использовать urllib2 используя прямую авторизацию
вот сам г*внокод:

import urllib2
import urllib

hostname   = 'https://oauth.vk.com/token'
app_id     = '------------'
app_secret = '------------'
user_login = '------------'
user_pwd   = '------------'
user_scope = 'friends,status,messages'
vkapi_version = '5.25'

#Login in vk.com

auth = urllib.urlencode({'grant_type':'password','client_id':app_id,'client_secret':app_secret,'username':user_login,
                'password':user_pwd,'scope':user_scope,'v':vkapi_version})
request = urllib2.Request(hostname,data=auth)
respons = urllib2.urlopen(request);)

request = urllib2.Request(hostname,data=auth)
respons = urllib2.urlopen(request);



print respons.read()

вот что он выводит:
Traceback (most recent call last):
 File "/home/enep/Experiments/python/vkapi/v1/vkapitest1.py", line 22, in <module>
respons = urllib2.urlopen(request);
 File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
 File "/usr/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
 File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
 File "/usr/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
 File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
 File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 401: Unauthorized

HTTP Error 401: Unauthorized - если меня я правильно понял то это ошибка авторизации

enep ★★★★★
() автор топика
Последнее исправление: enep (всего исправлений: 2)
Ответ на: комментарий от Siado

python 2.7 задача авторизоваться что бы получить access_token но использовать в UI свое окно авторизации

enep ★★★★★
() автор топика
Ответ на: комментарий от Siado

спасибо, но это невариант

enep ★★★★★
() автор топика

Вот что у меня получилось, все работает

#!/usr/bin/python
#-*- coding: utf-8 -*-s

from lxml.html import fromstring, tostring
import urllib2
import urllib
import re
import cookielib

hostname   = 'https://oauth.vk.com/token'
app_id     = '-----------------------------------'
app_secret = '--------------------------------'
user_login = '---------------------------------'
user_pwd   = '--------------------------------------------'
user_scope = '----------------------------------------'
vkapi_version = '5.25'

cookie = cookielib.CookieJar()

#Login in vk.com
request = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie),urllib2.HTTPRedirectHandler())
request.addheaders = [('User-agent', 'Mozilla/6.0')]


#https://login.vk.com/?act=login&email=&pass=
login_param2 ='act=login&email=%s&pass=%s' % (user_login,user_pwd)
respons = request.open('https://login.vk.com/',login_param2)


#https://oauth.vk.com/authorize?client_id=&scope=&redirect_uri=https://oauth.vk.com/blank.html&display=page&v=5.25&response_type=token
if  urlparse.urlparse(respons.geturl()).path == '/login':
    print "NNOO LLOOGGIINN"
    import sys
    sys.exit()
auth_param = 'client_id=%s&scope=%s&response_type=token&redirect_url=%s&v=5.25&client_secret=%s&display=popup' %(app_id,user_scope,'https://oauth.vk.com/blank.html',app_secret)
resp = request.open('https://oauth.vk.com/authorize',auth_param)
_url  =  resp.geturl()

# Отправляем запрос на разрешение доступа
if _url  == 'https://oauth.vk.com/authorize':
    action = fromstring(_html).xpath('.//form[@action]')[0].get('action')
    resp = request.open(action)
    _url  =  resp.geturl()
    _html =  resp.read()

reg = 'access_token=(.*?)&'
rg = re.compile(reg,re.IGNORECASE|re.DOTALL)
m = rg.search(_url)
token = m.group(1)

print "Yooo:",token


Единственное urllib2 запросы долго идут. Может вы мне подскажите всем проблема? заранее спасибо

enep ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.