Как написать веб-сервер для обработки post (тип содержимого — application / json) на python?

#python #webserver

#python #веб-сервер

Вопрос:

Далее следует подробная информация:

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

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

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

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

{"name": "John"}
  

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

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

Спасибо!

Ответ №1:

Используйте cgi.FieldStorage класс to для обработки данных в виде данных формы, доступных из 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)
  

Комментарии:

1. Ссылка не работает, хотелось бы увидеть часть об обработке тела post

Ответ №2:

В вашем post элемент {"name": "John"} — это просто строка, которую необходимо проанализировать в формате json. Итак, сначала импортируйте json модуль, а затем выполняйте json.load .

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

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