用python(或apache下的通用CGI)处理分块编码的httppost请求

2024-05-21 02:09:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个j2me客户机,它可以将一些分块编码的数据发布到web服务器。我想用python处理数据。该脚本作为一个CGI脚本运行,但显然apache将拒绝对CGI脚本的分块编码post请求。据我所知mod\upython、WSGI和FastCGI也不适合。在

我想知道是否有一种方法可以让python脚本处理这种输入。我愿意接受任何建议(例如,apache2中的配置设置可以组装块,一个独立的python服务器也可以这样做,等等),我做了很多谷歌搜索,没有发现任何有用的东西,这很奇怪。在

我知道在服务器端使用java将是一个解决方案,但我无法想象apache+python无法解决这一问题。在


Tags: 数据服务器脚本webmodwsgi编码客户机
3条回答

apache2.2mod_cgi对我来说工作得很好,Apache在将请求传递到cgi应用程序时透明地取消了该请求。在

WSGI目前不允许分块请求,mod\uwsgi确实用411响应来阻止它们。它在wsgi2.0的绘图板上。但是恭喜你找到了一个能处理块请求的东西,我以前从没见过!在

一年前,当一个J2ME客户机与Python/Ruby后端通信时,我遇到了完全相同的问题。我发现的唯一不需要应用程序或基础结构级别更改的解决方案是使用mod峎proxy的一个相对未知的特性。在

Mod_proxy能够缓冲传入(分块)请求,然后在将它们传递到代理后端之前,将它们重写为具有内容长度标头的单个请求。巧妙的诀窍是,您可以创建一个小型代理配置,将请求传递回同一个Apache服务器。i、 e.在端口80上接收一个传入的分块请求,“dechunk”它,然后将其传递到端口81上不符合http1.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。在

我认为使用twisted框架来构建http侦听器。 Twisted支持分块编码。在

http://python.net/crew/mwh/apidocs/twisted.web.http._ChunkedTransferEncoding.html

希望这有帮助。在

相关问题 更多 >