Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python: BaseHTTPRequestHandler - Read raw post

How do I read the raw http post STRING. I've found several solutions for reading a parsed version of the post, however the project I'm working on submits a raw xml payload without a header. So I am trying to find a way to read the post data without it being parsed into a key => value array.

like image 405
kwolfe Avatar asked Jul 26 '13 18:07

kwolfe


1 Answers

self.rfile.read(int(self.headers.getheader('Content-Length'))) will return the raw HTTP POST data as a string.

Breaking it down:

  1. The header 'Content-Length' specifies how many bytes the HTTP POST data contains.
  2. self.headers.getheader('Content-Length') returns the content length (value of the header) as a string.
  3. This has to be converted to an integer before passing as parameter to self.rfile.read(), so use the int() function.

Also, note that the header name is case sensitive so it has to be specified as 'Content-Length' only.

Edit: Apparently header field is not case sensitive (at least in Python 2.7.5) which I believe is the correct behaviour since https://www.rfc-editor.org/rfc/rfc2616 states:

Each header field consists of a name followed by a colon (":") and the field value. Field names are case-insensitive.

like image 184
Sindhuri Kuppasad Avatar answered Oct 15 '22 14:10

Sindhuri Kuppasad