2010-12-04 17 views
1

Je souhaite simplement renvoyer un objet JSON, mais les informations HTTP sont en cours d'impression en dessous. J'utilise Google App Engine et https://github.com/simplegeo/python-oauth2Les informations HTTP de Google App Engine sont en cours d'impression

#!/usr/bin/env python 

from google.appengine.ext import webapp 
from google.appengine.ext.webapp import util 
from django.utils import simplejson as json 
import oauth2 as oauth 
import cgi 

class MainHandler(webapp.RequestHandler): 

    def get(self): 

    consumer = oauth.Consumer(key="xxx", 
     secret="xxx") 

    request_token_url = "xxx" 

    client = oauth.Client(consumer) 

    resp, content = client.request(request_token_url, "POST") 

    if resp['status'] != '200': 
     raise Exception("Invalid response %s." % resp['status']) 

    request_token = dict(cgi.parse_qsl(content)) 
    print 
    print json.dumps({"oauth_token": request_token['oauth_token'], "oauth_token_secret": request_token['oauth_token_secret']}) 

def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], 
             debug=True) 
    util.run_wsgi_app(application) 


if __name__ == '__main__': 
    main() 

Répondre

2

Ajouter le bon Content-Type et passer à self.response.out.write

self.response.headers['Content-Type'] = 'application/json' 
self.response.out.write(data) 
1

Au lieu de print utilisation self.response:

self.response.out.write("Some Text") 

Je suppose que le RequestHandler imprime automatiquement un en-tête HTTP par défaut et il envoie si rien est écrit à la réponse .out flux.

Si vous souhaitez uniquement envoyer des données JSON, vous pouvez définir les informations d'en-tête "Content-Type" sur "application/json".