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 в виде строки.

ломая его:

  1. заголовок "Content-Length" указывает, сколько байтов содержат данные HTTP POST.
  2. self.headers.getheader('Content-Length') возвращает длину содержимого (значение заголовка) в виде строки.
  3. это должно быть преобразовано в целое число перед передачей в качестве параметра в self.rfile.read(), Так что используйте .

кроме того, обратите внимание, что название заголовка чувствительны к регистру, так это и указывается только как "длина содержимого".

Edit: по-видимому, поле заголовка не чувствительно к регистру (по крайней мере, в Python 2.7.5), что я считаю правильным поведением, так как https://tools.ietf.org/html/rfc2616 государства:

каждое поле заголовка состоит имени, за которым следует двоеточие (":") и поле "Значение". Названия полей нечувствительны к регистру.