JSON-RPC неправильно сформированный запрос с - PullRequest
2 голосов
/ 12 апреля 2011

Я создаю приложение, которое связывается с бэкэндом django, используя json-rpc.Пока что все работает хорошо.Однако я обнаружил аномалию в отправке "".Насколько я знаю, запрос работает нормально, однако django плохо интерпретирует ответ.Я воспроизвел упрощенный запрос и ответ ниже:

Запрос:

{"jsonrpc":"2.0","id":"1","method":"test","params":
{"id":"80","name":"tests","introduction":"hello  there"}}

Джанго получает:

<QueryDict:u'{"jsonrpc":"2.0","id":"1","method":"test","params":
{"id":"80","name":"tests","introduction":"hello ': [u''], u'nbsp': [u''], u'there"}}': [u'']}>

Ожидаемый ответ:

<QueryDict: {u'{"jsonrpc":"2.0","id":"1","method":"test","params":
{"id":"80","name":"tests","introduction":"hello &nbsp;there"}}': [u'']}>

Кажется, что Джанго интерпретирует & и;в виде специальных символов и создает неожиданный словарь в своей переменной request.POST.

Что мне нужно сделать, чтобы убедиться, что строка json не искажена?Я попытался закодировать его с помощью метода php htmlspecialchars (), но, поскольку это не устраняет '&', проблема не устраняется.

Любая помощь будет высоко оценена.

1 Ответ

1 голос
/ 11 мая 2011

Django обрабатывает запрос (POST?), Декодируя тело (строку json), как если бы оно было строкой запроса, а не json.

в строке запроса, & и ; обозначают конец пары ключ: значение.Разделение тела запроса на эти два символа дает пары ключ: значение, которые вы видите в Django QueryDict.

Вам нужно получить тело запроса POST и явно декодировать его в диктовку самостоятельно, используя либо стандартныйlib json, или модуль simplejson.

У меня небольшой опыт работы с Django, но я представляю, что где-то в вашем обработчике представлений вы будете делать что-то похожее на:

try:
    data = json.loads(requesst.raw_post_data)
    ## work with the data...
except ValueError:
    ## do something...

Без сомнения, Djangoспособ переместить эту обработку json из ваших представлений в более подходящее место.

...