Передача данных JSON в Cherrypy GET - PullRequest
0 голосов
/ 18 октября 2019

У меня проблемы с передачей данных json на (и получение обратно) сервера cherrypy

В следующем примере, когда я использую метод POST с моими данными json, он передается правильно.

Мне действительно нужно вернуть некоторые данные, поэтому я хочу использовать GET. Когда я тестирую метод GET, cherrypy.request не имеет значения json. Мой звонок requests.get(API_URL, json=test_json, headers=headers)

Я подозреваю, что проблема связана с информацией, которую я передаю с помощью команды requests, но я не могу заставить ее работать.

Благодарен за любую помощь.

Код сервера cherrypy:
'''
Provides webserver api entry point

'''

import cherrypy
import os

class MyWebService(object):

    @cherrypy.expose
    def index(self):
        return open('index.html')

@cherrypy.expose
class ExampleWebService(object):

    @cherrypy.tools.json_out()
    @cherrypy.tools.json_in()
    def POST(self, text="test"):
        input_dict = cherrypy.request.json
        return input_dict

    @cherrypy.tools.accept(media='text/plain')
    @cherrypy.tools.json_in()
    @cherrypy.tools.json_out()
    def GET(self, text="test"):
        input_dict = cherrypy.request.json
        return input_dict

    if __name__ == '__main__':
    config = {'server.socket_host': '0.0.0.0',
              'server.socket_port': 8080
              }
    cherrypy.config.update(config)

    conf = {

        '/': {
            'tools.sessions.on': True,
            'tools.staticdir.root': os.path.abspath(os.getcwd())
        },
        '/process': {
            'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
            'tools.response_headers.on': True,
            'tools.response_headers.headers': [('Content-Type', 'application/json')],
        },
        '/static': {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': './public'
        }
    }
    #create web service
    webapp = MyWebService()
    # attach "process" to web service
    webapp.process = ExampleWebService()
    cherrypy.quickstart(webapp, '/', conf)
Тестирование API
test_json = json.dumps(test_dict)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
#using post the json data is passed to POST
result_dict1 = requests.post(API_URL, data=test_json, headers=headers)
#using get the json data is not passed to GET
result_dict2 = requests.get(API_URL, json=test_json, headers=headers)
...