415 exceção Cherrypy webservice
Estou tentando criar um serviço da web Cherrypy / Python. Eu já passo o dia inteiro descobrindo como tornar possível uma solicitação de ajax entre domínios. Finalmente está funcionando, mas agora tenho a próxima edição. Acho que já conheço a solução, mas não sei como implementá-la. O problema é que, quando estou enviando a solicitação ajax, o servidor Cherrypy responde com:
415 Unsupported Media Type
Expected an entity of content type application/json, text/javascript
Traceback (most recent call last): File "/Library/Python/2.7/site-packages/cherrypy/_cprequest.py", line 663, in respond self.body.process() File "/Library/Python/2.7/site-packages/cherrypy/_cpreqbody.py", line 996, in process super(RequestBody, self).process() File "/Library/Python/2.7/site-packages/cherrypy/_cpreqbody.py", line 538, in process self.default_proc() File "/Library/Python/2.7/site-packages/cherrypy/_cperror.py", line 411, in __call__ raise selfHTTPError: (415, u'Expected an entity of content type application/json, text/javascript')
A solução que encontrei e tentando testar está adicionando esta linha à configuração:
'tools.json_in.force': False
Então, eu tentei implementá-lo neste código:
import cherrypy
import json
import sys
class RelatedDocuments:
def index(self):
return "Hello World!"
@cherrypy.tools.json_out()
@cherrypy.tools.json_in()
def findRelated(self, **raw):
#Get JSON message form request
request = cherrypy.request.json
result = []
#SOME CODE...
return result;
# Expose the index method through the web. CherryPy will never
# publish methods that don't have the exposed attribute set to True.
index.exposed = True
findRelated.exposed = True
def CORS():
cherrypy.response.headers["Access-Control-Allow-Origin"] = "*"
import os.path
tutconf = os.path.join(os.path.dirname(__file__), 'webserver.conf')
config = {
'global': {
'server.socket_host':'127.0.0.1',
'server.socket_port': 8080,
'log.error_file' : 'Web.log',
'log.access_file' : 'Access.log'
},
'/': {
'tools.CORS.on': True
}
}
if __name__ == '__main__':
cherrypy.tools.CORS = cherrypy.Tool('before_finalize', CORS)
cherrypy.quickstart(RelatedDocuments(),config=config)
Eu adicionei a linha de configuração sob a linha tools.CORS.on, mas isso não funcionou. Em seguida, tentei isso:
cherrypy.config.update({
'tools.json_in.force': False,
});
Não funcionou eiter..next eu tentei implementar isso logo acima do método findRelated:
@cherrypy.config(**{'tools.json_in.force': False})
Todas as implementações me deram um erro de 500, eu realmente aprecio isso se alguém puder me ajudar. Desde já, obrigado!