Я пытаюсь выяснить, как получить данные в формате JSON POST в Python 2.7 с установкой CherryPy, которая служит как HTML и JSONКак получить данные запроса JSON POST в CherryPy в питона 2,7
Я использую этот скрипт для отправки демо JSON запрос
import urllib2
import json
def mytest():
d = {
'hello': '1',
'world': '2'
}
print(json.dumps(d))
URL = 'http://localhost:8092/json_in'
print(URL)
post_data = json.dumps(d)
req = urllib2.Request(URL, post_data)
RESULT = urllib2.urlopen(req).read()
print(RESULT)
if __name__ == '__main__':
mytest()
CherryPy сторона работает как этот
# -*- coding: utf-8 -*-^
import cherrypy
class WelcomePage:
def index(self):
return "<html><body>hello world</body><html>"
index.exposed = True
def json_in(self,**kwargs):
print kwargs
# this is dumb but works to grab the first and only argument
for key,value in kwargs.iteritems():
myjson = key
parsed_json = json.loads(myjson)
print(parsed_json['hello'])
return "{}"
json_in.exposed = True
if __name__ == '__main__':
cherrypyconf = "cherrypy.conf"
cherrypy.quickstart(WelcomePage(),config=cherrypyconf)
Когда я запустить сервер и отправить запрос я могу видеть мою просьбу в (из консул печати команды), но строка синтаксического анализа завершается с ошибкой TypeError : ожидается строка или буфер
Любой намек, как это исправить?
UPDATE:
Проблема, кажется, что я не понимаю, как обращаться с ** kwargs. Обновленный код работает (но использует очень тупой способ извлечь JSON, пока я не найду правильный синтаксис, чтобы получить первый аргумент)
Спасибо. Сначала я попробовал этот подход на стороне сервера, но затем все страницы были обработаны JSON-like. Возможно, использование «@ cp.expose» на каждой странице будет работать лучше (клиент - это только реальный манекен, который я использовал для тестирования) Может быть, я должен попробовать это снова ... – 576i
Протестировано и работает. Однако факт заключается в том, что изменение с измененным клиентом старый сервер перестает распознавать запрос JSON. – 576i
Вы можете указать другой допустимый тип содержимого на декораторе 'json_in'. Как текст/html. Проверьте документы: http://docs.cherrypy.org/en/latest/pkg/cherrypy.lib.html?highlight=json#cherrypy.lib.jsontools.json_in. '@ cp.expose' только устанавливает свойство' visible', поэтому оно не связано с обработкой json. Это может помочь вам узнать больше о вишневых инструментах и настройках, возможно, вы сможете это сделать в разделах Configure and Extend http://docs.cherrypy.org. – cyraxjoe