Python: BaseHTTPRequestHandler-прочитать необработанный пост
Как прочитать необработанную строку HTTP post. Я нашел несколько решений для чтения проанализированной версии сообщения, однако проект, над которым я работаю, отправляет полезную нагрузку raw xml без заголовка. Поэтому я пытаюсь найти способ прочитать данные post без их анализа в массив key => value.
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()
, Так что используйте .
кроме того, обратите внимание, что название заголовка чувствительны к регистру, так это и указывается только как "длина содержимого".
Edit: по-видимому, поле заголовка не чувствительно к регистру (по крайней мере, в Python 2.7.5), что я считаю правильным поведением, так как https://tools.ietf.org/html/rfc2616 государства:
каждое поле заголовка состоит имени, за которым следует двоеточие (":") и поле "Значение". Названия полей нечувствительны к регистру.