libreria - Procesamiento de solicitudes codificadas HTTP POST en python(o CGI genérico bajo apache)
requests python install (5)
Tengo un cliente j2me que publicará algunos datos codificados fragmentados en un servidor web. Me gustaría procesar los datos en Python. La secuencia de comandos se está ejecutando como uno CGI, pero aparentemente apache rechazará una solicitud de publicación codificada fragmentada a una secuencia de comandos CGI. Por lo que pude ver, mod_python, WSGI y FastCGI tampoco se van.
Me gustaría saber si hay una forma de hacer que un script de python procese este tipo de entrada. Estoy abierto a cualquier sugerencia (por ejemplo, una configuración de configuración en apache2 que ensamblaría los fragmentos, un servidor independiente de python que haría lo mismo, etc.). Busqué bastante en Google y no encontré nada utilizable, que es bastante extraño.
Sé que recurrir a Java en el lado del servidor sería una solución, pero no puedo imaginar que esto no pueda resolverse con apache + python.
Apache 2.2 mod_cgi funciona bien para mí, Apache descomprime la solicitud de forma transparente a medida que se pasa a la aplicación CGI.
WSGI actualmente no permite solicitudes fragmentadas, y mod_wsgi sí las bloquea con una respuesta 411. Está en el tablero de dibujo para WSGI 2.0. Pero felicidades por encontrar algo que solicite fragmentos, ¡nunca antes había visto uno!
Tal vez es un problema de configuración? Django puede ser presentado con Apache por mod_python, WSGI y FastCGI y puede aceptar cargas de archivos.
Yo diría que use el marco retorcido para construir su oyente http. Twisted apoya la codificación fragmentada.
http://python.net/crew/mwh/apidocs/twisted.web.http._ChunkedTransferEncoding.html
Espero que esto ayude.
Tuve exactamente el mismo problema hace un año con un cliente J2ME hablando con un backend de Python / Ruby. La única solución que encontré que no requiere cambios de nivel de aplicación o infraestructura fue usar una característica relativamente desconocida de mod_proxy.
Mod_proxy tiene la capacidad de almacenar temporalmente las solicitudes entrantes (fragmentadas), y luego reescribirlas como una única solicitud con un encabezado Content-Length antes de pasarlas a un back-end proxy. El truco perfecto es que puede crear una pequeña configuración proxy que devuelva la solicitud al mismo servidor Apache. es decir, tome una solicitud de fragmentos entrantes en el puerto 80, "dechunk", y luego páselo a su servidor no compatible con HTTP 1.1 en el puerto 81.
Utilicé esta configuración en producción durante poco más de un año sin problemas. Se ve algo así como esto:
ProxyRequests Off
<Proxy http://example.com:81>
Order deny,allow
Allow from all
</Proxy>
<VirtualHost *:80>
SetEnv proxy-sendcl 1
ProxyPass / http://example.com:81/
ProxyPassReverse / http://example.com:81/
ProxyPreserveHost On
ProxyVia Full
<Directory proxy:*>
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
Listen 81
<VirtualHost *:81>
ServerName example.com
# Your Python application configuration goes here
</VirtualHost>
También obtuve una descripción completa del problema y mi solución detallada en mi blog .
No puedes hacer lo que quieras con mod_python. Puedes hacerlo con mod_wsgi si estás usando la versión 3.0. Sin embargo, tiene que salir de la especificación WSGI 1.0 ya que WSGI prohíbe efectivamente el contenido de solicitud fragmentada.
Busque WSGIChunkedRequest en http://code.google.com/p/modwsgi/wiki/ChangesInVersion0300 para conocer lo que se requiere.