Parsing MIME-encoded data in an HTTP request

Ron Garret rNOSPAMon at flownet.com
Sun Jul 6 09:47:50 CEST 2008


In article <5fq3k5-eva.ln1 at nb2.stroeder.com>,
 Michael Ströder <michael at stroeder.com> wrote:

> Ron Garret wrote:
> > In article <rNOSPAMon-BDA88C.15302904072008 at news.gha.chartermi.net>,
> >  Ron Garret <rNOSPAMon at flownet.com> wrote:
> > 
> >> In article <3a11k5-al7.ln1 at nb2.stroeder.com>,
> >>  Michael Ströder <michael at stroeder.com> wrote:
> >>
> >>> Ron Garret wrote:
> >>>> I'm writing a little HTTP server and need to parse request content that 
> >>>> is mime-encoded.  All the MIME routines in the Python standard library 
> >>>> seem to have been subsumed into the email package, which makes this 
> >>>> operation a little awkward.
> >>> How about using cgi.parse_multipart()?
> >>>
> >> Unfortunately cgi.parse_multipart doesn't handle nested multiparts, 
> >> which the requests I'm getting have.  You have to use a FieldStorage 
> >> object to do that, and that only works if you're actually in a cgi 
> >> environment, which I am not.  The server responds to these requests 
> >> directly.
> >>
> >> Anyway, thanks for the idea.
> > 
> > Hm, it actually seems to work if I manually pass in the outerboundary 
> > parameter and environ={'REQUEST_METHOD':'POST'}  That seems like the 
> > Right Answer.
> 
> I'm also using it to parse form parameters in a message body received by 
> POST.
> 
> CIao, Michael.

Just for the record, here's the incantation I ended up with:


class post_handler(BaseHTTPRequestHandler):
  def do_POST(self):
    form = cgi.FieldStorage(fp=self.rfile, headers=self.headers,
                            environ={'REQUEST_METHOD':'POST'})
    ...


works like a charm.

rg



More information about the Python-list mailing list