[Python-es] "parsear" los datos de 'input' en una llamada HTTP POST con SimpleHTTPServer.SimpleHTTPRequestHandler

Jose Caballero jcaballero.hep en gmail.com
Mar Nov 6 21:36:18 CET 2012


El 6 de noviembre de 2012 14:55, Carlos Zuniga <carlos.zun en gmail.com>escribió:

> 2012/11/6 Jose Caballero <jcaballero.hep en gmail.com>:
> > Hola,
> >
> >
> >
> > como ejercicio puramente didáctico (por ahora) estoy haciendo algunas
> > pruebas con las classes SimpleHTTP* que trae python [tiene que ser
> > python2.4].
> > He conseguido arrancar un servicio httpd, y puedo navegar con un
> 'browser'
> > por los directorios.
> > También he averiguado cómo modificar el 'output', escribiendo el
> contenido
> > en self.wfile
> >
> > No he sido capaz de averiguar cómo "parsear" los datos de 'input' en
> caso de
> > una llamada POST.
> > He añadido un método do_POST():
> >
> >
> > class
> MySimpleHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
> >     ...
> >     def do_POST(self):
> >         ...
> >         self.wfile.write( 'mundo\n' )
> >
> >
> > Efectivamente, luego puedo hacer
> >
> >       $ curl -d hola http://www.myserver.net:1234
> >       mundo
> >       $
> >
> > Sin embargo no he sido capaz de averiguar cómo quedarme con los datos de
> > 'input' en una variable. En este caso sencillo simplemente 'hola', pero
> > podría ser algo más complejo (por ejemplo un diccionario).
> > Lo estoy intentando con la clase cgi, pero no lo consigo.
> > No sé si el problema está en el comando curl en si mismo, que no está
> > completo, o que aún no he encontrado el método de la clase cgi adecuado.
> >
> > Cualquier pista que me puedan dar será más que bien recibida.
>
> Los datos que se envía por un formulario POST se encuentran en los
> headers del request. Dentro de tu método do_POST deberías poder
> acceder a self.headers (que es un objeto del tipo MessageClass) para
> ver los datos:
>
> http://docs.python.org/2/library/basehttpserver.html#BaseHTTPServer.BaseHTTPRequestHandler.headers
>
>

Ya había intentado esa vía. Sin embargo, si hago  print self.headers en
do_POST(), esto es lo que obtengo:


User-Agent: curl/7.15.5 (x86_64-redhat-linux-gnu) libcurl/7.15.5
OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Host: www.myserver.net:1234
Pragma: no-cache
Accept: */*
Content-Length: 4
Content-Type: application/x-www-form-urlencoded
Connection: Keep-Alive
X-BlueCoat-Via: F7D3AB2CA1943FBA


No veo el 'input' por ninguna parte.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20121106/821bb8fb/attachment.html>


Más información sobre la lista de distribución Python-es