Как написать веб-сервер для обработки сообщений (content-type is application / json) в python? - PullRequest
2 голосов
/ 15 апреля 2011

Вот подробности:

Мы хотим написать веб-сервер на Python v2.6.5 и завершили метод do_GET.

Но я не знаю, какнаписать метод do_POST().

Если почтовый запрос выглядит следующим образом:

POST /employee/111 HTTP/1.1
Content-Type: application/json
Content-Length: XX

{"name": "John"}

Как получить данные JSON {"name": "John"} в методе do_POST()?(предпочитаю стандартную библиотеку)

Буду очень признателен, если вы сможете объяснить почему и дать образец.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

Используйте класс cgi.FieldStorage для обработки данных как данных формы, доступных из POST. И когда вы идете, часть, которая является телом POST и которая в вашем случае имеет формат json.

def do_POST(self):
    # Parse the form data posted
    form = cgi.FieldStorage(
        fp=self.rfile, 
        headers=self.headers,
        environ={'REQUEST_METHOD':'POST',
                 'CONTENT_TYPE':self.headers['Content-Type'],
                 })

Вот пример , иллюстрирующий, как это сделать

И если содержимое является надлежащим json, используйте модуль json из стандартной библиотеки для загрузки в формат json, и вы можете разобраться с этим дальше.

>>> import json
>>> s = '{"name": "john"}'
>>> d = json.loads(s)
0 голосов
/ 15 апреля 2011

В вашем посте элемент {"name": "John"} - это просто строка, которую нужно проанализировать с помощью json. Поэтому сначала импортируйте модуль json, а затем выполните json.load.

import json
post_json_data = json.loads('{"name": "John"}')

Чтобы определить, где начинаются данные json, вам просто нужно прочитать до первого {, все оттуда должно быть частью данных json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...