Python: BaseHTTPRequestHandler - Читать необработанный пост
Как мне прочитать необработанный http пост STRING. Я нашел несколько решений для чтения разобранной версии поста, однако проект, над которым я работаю, представляет необработанную полезную нагрузку xml без заголовка. Поэтому я пытаюсь найти способ прочитать данные поста без разбора их на массив ключ => значение.
2 ответа
Я думаю self.rfile.read(self.headers.getheader('content-length'))
должен вернуть необработанные данные в виде строки. Согласно документации непосредственно внутри класса BaseHTTPRequestHandler:
- rfile is a file object open for reading positioned at the
start of the optional input data part;
self.rfile.read(int(self.headers.getheader('Content-Length')))
вернет необработанные данные HTTP POST в виде строки.
Разбивая это:
- Заголовок "Content-Length" указывает, сколько байтов содержит данные HTTP POST.
self.headers.getheader('Content-Length')
возвращает длину содержимого (значение заголовка) в виде строки.- Это должно быть преобразовано в целое число перед передачей в качестве параметра
self.rfile.read()
так что используйтеint()
функция.
Также обратите внимание, что имя заголовка чувствительно к регистру, поэтому его нужно указывать только как "Content-Length".
Редактировать: Очевидно, что поле заголовка не чувствительно к регистру (по крайней мере, в Python 2.7.5), что я считаю правильным поведением, поскольку https://tools.ietf.org/html/rfc2616 гласит:
Каждое поле заголовка состоит из имени, за которым следуют двоеточие (":") и значение поля. Имена полей не чувствительны к регистру.