我有一个 j2me 客户端,可以将一些分块编码数据发布到网络服务器。我想用 python 处理数据。该脚本作为 CGI 脚本运行,但显然 apache 将拒绝对 CGI 脚本的分块编码发布请求。据我所知,mod_python、WSGI 和 FastCGI 也不行。
我想知道是否有办法让 python 脚本处理这种输入。我对任何建议持开放态度(例如 apache2 中的配置设置可以组装 block ,独立的 python 服务器可以执行相同的操作等)我做了很多谷歌搜索但没有找到任何可用的东西,这是很奇怪。
我知道在服务器端求助于 java 将是一个解决方案,但我无法想象这不能用 apache + python 解决。
最佳答案
一年前我遇到了完全相同的问题,J2ME 客户端与 Python/Ruby 后端通信。我发现不需要更改应用程序或基础架构级别的唯一解决方案是使用 mod_proxy 的一个相对未知的功能。
Mod_proxy 能够缓冲传入(分块)请求,然后在将它们传递到代理后端之前将它们重写为带有 Content-Length header 的单个请求。巧妙的技巧是您可以创建一个微型代理配置,将请求传回同一个 Apache 服务器。即在端口 80 上接收传入的分块请求,将其“分解”,然后将其传递到端口 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 .
关于python - 在 python(或 apache 下的通用 CGI)中处理分块编码的 HTTP POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/284741/