我正在尝试使用访问令牌交换授权代码,下面的Google Oauth Documentation.代码只是给我一个Error: HTTP 400: Bad Request
,身体中没有任何内容。
有人能看出这段代码有什么问题吗?
#!/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()
答案 0 :(得分:1)
实际上,没关系。现在有了美丽的 200 OK 。
故障排除提示:
换句话说,上面是工作代码!