415 Ausnahme Cherrypy Webservice
Ich versuche einen Cherrypy / Python Webservice zu erstellen. Ich verbringe bereits den ganzen Tag damit, herauszufinden, wie eine domänenübergreifende Ajax-Anfrage möglich wird. Das funktioniert endlich, aber jetzt habe ich die nächste Ausgabe. Ich glaube, ich kenne die Lösung bereits, weiß aber nicht, wie ich sie implementieren soll. Das Problem ist, dass der Cherrypy-Server beim Senden der Ajax-Anfrage mit: @ antworte
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')
Die Lösung, die ich gefunden habe und die ich testen möchte, besteht darin, der Konfiguration die folgende Zeile hinzuzufügen:
'tools.json_in.force': False
So habe ich versucht, es in diesem Code zu implementieren:
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)
Ich habe die Konfigurationszeile unter der Zeile tools.CORS.on hinzugefügt, aber das hat nicht funktioniert. Als nächstes habe ich folgendes versucht:
cherrypy.config.update({
'tools.json_in.force': False,
});
Hat nicht funktioniert eiter..next Ich habe versucht, dies direkt über der findRelated-Methode zu implementieren:
@cherrypy.config(**{'tools.json_in.force': False})
Alle Implementierungen gaben mir einen Fehler von 500, ich weiß es wirklich zu schätzen, wenn mir jemand helfen kann. Danke im Voraus