我有一个j2me客户端会将一些分块编码数据发布到网络服务器。我想在python中处理数据。该脚本作为CGI运行,但显然apache将拒绝对CGI脚本进行分块编码的post请求。据我所知,mod_python,WSGI和FastCGI也没有。
我想知道是否有办法让python脚本处理这种输入。我对任何建议都持开放态度(例如apache2中的混淆设置可以组装块,一个独立的python服务器也可以做同样的事情等等。)我做了很多google搜索并没有找到任何可用的东西,这是很奇怪。
我知道在服务器端使用java会是一个解决方案,但我无法想象用apache + python无法解决这个问题。
答案 0 :(得分:6)
一年前我遇到了一个完全相同的问题,J2ME客户端与Python / Ruby后端交谈。我发现不需要应用程序或基础架构级别更改的唯一解决方案是使用mod_proxy的相对未知的功能。
Mod_proxy能够缓冲传入(分块)请求,然后在将它们传递给代理后端之前将它们重写为具有Content-Length头的单个请求。巧妙的诀窍是,您可以创建一个微小的代理配置,将请求传递回同一个Apache服务器。即在端口80上获取传入的chunked请求,“dechunk”它,然后将其传递到端口81上的非HTTP 1.1兼容服务器。
我在生产中使用这种配置一年多没有问题。看起来有点像这样:
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>
我也完整地写了这个问题,我的解决方案详细on my blog。
答案 1 :(得分:2)
我会说使用扭曲的框架来构建你的http监听器。 Twisted支持分块编码。
http://python.net/crew/mwh/apidocs/twisted.web.http._ChunkedTransferEncoding.html
希望这有帮助。
答案 2 :(得分:2)
Apache 2.2 mod_cgi对我来说很好,Apache在传递给CGI应用程序时透明地解除了请求。
WSGI目前不允许分块请求,mod_wsgi确实用411响应阻止了它们。它是WSGI 2.0的绘图板。但是祝贺找到了一些可以满足需求的东西,我以前从未见过它!
答案 3 :(得分:2)
你不能用mod_python做你想做的事。如果您使用的是3.0版,则可以使用mod_wsgi执行此操作。但是,您必须跳出WSGI 1.0规范,因为WSGI有效地禁止了分块请求内容。
在http://code.google.com/p/modwsgi/wiki/ChangesInVersion0300中搜索WSGIChunkedRequest以了解所需内容。
答案 4 :(得分:1)
可能是配置问题? Django可以通过mod_python,WSGI和FastCGI与Apache对接,它可以接受文件上传。