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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage