2012-06-04 1 views
1

J'écris un programme pour inviter plusieurs contacts Windows Live dans une application web, le tout dans Django 1.4. Je rencontre le problème suivant.Windows Live Login API Problème SSL - Python

Je suis en mesure de se connecter l'utilisateur dans Windows Live en utilisant ses identifiants de compte via l'API Windows Live REST en utilisant ce morceau de code

def hotmail(request): 
auth_params = { 
     'client_id': settings.HOTMAIL_KEY, 
     'scope': 'wl.basic', 
     'response_type': 'code', 
     'redirect_uri': 'http://my_testing_comain/hotmail/process' 
    } 
auth_url = settings.HOTMAIL_AUTH_URL % urllib.urlencode(auth_params) 
return HttpResponseRedirect(auth_url) 

Ensuite, je reçois un code d'autorisation que j'échange d'une jeton d'accès (selon le protocole OAuth) c'est le morceau de code utiliser pour traiter la réponse de Windows live:

def hotmail_process(request): 
if request.method == 'GET': 
    parameters = { 
      'code': request.GET['code'], 
      'grant_type': 'authorization_code', 
      'redirect_uri': 'http://my_testing_url/hotmail/process', 
      'client_id': settings.HOTMAIL_KEY, 
      'client_secret': settings.HOTMAIL_SECRET, 
     } 
    response = urllib2.urlopen(settings.HOTMAIL_AUTH_URL % urllib.urlencode(parameters)).read() 
    response = simplejson.loads(response) 
    consumer = oauth.Consumer(settings.HOTMAIL_KEY, settings.HOTMAIL_SECRET) 
    client = oauth.Client(consumer) 
    contacts = client.request(settings.HOTMAIL_USER_FRIENDS_URI % response['access_token']) 
    return HttpResponse(simplejson.loads(contacts)) 
return HttpResponse('Invalid request') 

Mais je reçois l'erreur suivante:

SSLHandshakeError at /hotmail/process/ 
[Errno 1] _ssl.c:499: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
Request Method: GET 
Request URL: http://my_testing_url/hotmail/process/?code=5330307c-664c-4d5b-27b3-a19a97bc8546 
Django Version: 1.4 
Exception Type: SSLHandshakeError 
Exception Value:  
[Errno 1] _ssl.c:499: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

and the following traceback: 


Environment: 


Request Method: GET 
Request URL: http://my_testing_url/hotmail/process/?code=5330307c-664c-4d5b-27b3-a19a97bc8546 

Django Version: 1.4 
Python Version: 2.7.1 
Installed Applications: 
('django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'django.contrib.admindocs', 
'contacts') 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Traceback: 
File "/home/user/virtenvs/israel/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/user/virtenvs/israel/networks/contacts/views.py" in hotmail_process 
    26.   contacts = client.request(settings.HOTMAIL_USER_FRIENDS_URI % response['access_token']) 
File "/home/user/virtenvs/israel/lib/python2.7/site-packages/oauth2/__init__.py" in request 
    682.    connection_type=connection_type) 
File "/home/user/virtenvs/israel/lib/python2.7/site-packages/httplib2/__init__.py" in request 
    1544.      (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
File "/home/user/virtenvs/israel/lib/python2.7/site-packages/httplib2/__init__.py" in _request 
    1294.   (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
File "/home/user/virtenvs/israel/lib/python2.7/site-packages/httplib2/__init__.py" in _conn_request 
    1230.     conn.connect() 
File "/home/user/virtenvs/israel/lib/python2.7/site-packages/httplib2/__init__.py" in connect 
    1005.      raise SSLHandshakeError(e) 

Exception Type: SSLHandshakeError at /hotmail/process/ 
Exception Value: [Errno 1] _ssl.c:499: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

La chose est que, si je supprime la ligne où je fais la client.request() pour cela:

return HttpResponseRedirect(settings.HOTMAIL_USER_FRIENDS_URI % response['access_token']) 

Je reçois les contacts au format JSON dans mon navigateur

Donc, apparemment , mon python oauth2 lib manque quelques certificats (ou c'est ce que je pense), donc j'ai essayé ce Python - SSL Issue with Oauth2 sans résultat. J'ai également essayé certaines bibliothèques avant de découvrir qu'elles étaient obsolètes. J'ai également essayé de le faire avec l'appel de l'API REST simple, mais j'ai reçu une réponse «INTERDIT».

Ma bibliothèque oauth2 fonctionne très bien car j'ai été capable d'implémenter la même fonctionnalité avec GMail.

Toute aide ou indice sera vraiment apprécié.

Merci d'avance.

+0

Ce serait génial si vous pouviez partager votre solution. :-) –

+0

Non, je n'ai pas, j'ai fini par faire un mini-howto sur comment exporter vos contacts en CSV de hotmail et yahoo et en écrivant des analyseurs pour cela – israelord

Répondre

0

Pourquoi ne pas simplement le faire? Où vous pouvez résoudre ce problème.

jcts = urlib2.urlopen(settings.HOTMAIL_USER_FRIENDS_URI % response['access_token']) 
contacts = simplejson.loads(jcts) 
+0

J'ai aussi essayé, mais il revient "interdit". = ( – israelord