У меня проблемы с передачей данных 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)