#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.