2013-06-05 126 views
0

我試圖使用訪問令牌交換授權碼,下面的Google Oauth Documentation.代碼只是給我一個Error: HTTP 400: Bad Request,沒有任何內容。使用訪問令牌@谷歌交換授權碼:400錯誤請求

任何人都可以看到這個代碼有什麼問題嗎?

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
import gdata  
from gdata.youtube import YouTubeVideoEntry 
from gdata.youtube.service import YouTubeService 
from gdata.service import BadAuthentication, CaptchaRequired 

import urllib2 
import urllib 
import cjson 
import urllib 
import urlparse 
import os, sys, random, string, argparse 

from tornado import httpclient 
import tornado.ioloop 
import tornado.web 

YT_CLIENT_ID = "redacted.apps.googleusercontent.com" 
YT_CLIENT_SECRET = 'prettyrandom' 


class ytOauthHandler(tornado.web.RequestHandler): 
    def get(self): 
     http_client = httpclient.AsyncHTTPClient() 
     code = self.request.arguments['code'][0] 
     post_data = { 'code'   : code, 
         'client_id'  : YT_CLIENT_ID, 
         'client_secret' : YT_CLIENT_SECRET, 
         'redirect_uri' : 'http://my.doma.in:8004/oauth_callback/', 
         'grant_type' : 'authorization_code'}   

     body = urllib.urlencode(post_data)       
     url = "https://accounts.google.com/o/oauth2/token" 
     http_client.fetch(url, self.handle_request, method='POST', headers={'Content-Type' : 'application/x-www-form-urlencoded'}, body=body) #Send it off! 
     self.write('OK') 

    def handle_request(self, response): 
     print response 


class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     pass 


application = tornado.web.Application([ 
    (r"/oauth_callback/", ytOauthHandler), 
    (r"/", MainHandler), 
]) 

if __name__ == "__main__": 
    application.listen(8004) 
    tornado.ioloop.IOLoop.instance().start() 

回答

1

其實,沒關係。現在有了美麗的200 OK

故障排除提示:

  1. 檢查,並仔細檢查所有憑證(CLIENT_ID,client_secret等)再次
  2. 檢查,即使你知道你不需要。 ;)

換句話說,以上是工作代碼!

相關問題