[Python-es] parsear los datos de 'input' en una llamada HTTP POST con SimpleHTTPServer.SimpleHTTPRequestHandler
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. Muchas gracias por adelantado. Saludos cordiales, Jose ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] parsear los datos de 'input' en una llamada HTTP POST con SimpleHTTPServer.SimpleHTTPRequestHandler
2012/11/6 Jose Caballero jcaballero@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 Saludos -- A menudo unas pocas horas de Prueba y error podrán ahorrarte minutos de leer manuales. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] parsear los datos de 'input' en una llamada HTTP POST con SimpleHTTPServer.SimpleHTTPRequestHandler
El 6 de noviembre de 2012 14:55, Carlos Zuniga carlos@gmail.comescribió: 2012/11/6 Jose Caballero jcaballero@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. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] parsear los datos de 'input' en una llamada HTTP POST con SimpleHTTPServer.SimpleHTTPRequestHandler
2012/11/6 Jose Caballero jcaballero@gmail.com: El 6 de noviembre de 2012 14:55, Carlos Zuniga carlos@gmail.com escribió: 2012/11/6 Jose Caballero jcaballero@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. Ok, parece que toda esa data la tiene en self.rfile, prueba con esto: def do_POST(self): l = int(self.headers['Content-Length']) print self.rfile.read(l) -- A menudo unas pocas horas de Prueba y error podrán ahorrarte minutos de leer manuales. ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Re: [Python-es] parsear los datos de 'input' en una llamada HTTP POST con SimpleHTTPServer.SimpleHTTPRequestHandler
Ok, parece que toda esa data la tiene en self.rfile, prueba con esto: def do_POST(self): l = int(self.headers['Content-Length']) print self.rfile.read(l) Funciona. Perfecto! ___ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/