处理Python WSGI中的HTTP PUT方法

时间:2011-01-09 22:58:53

标签: python http wsgi put

我目前有一个bash应用程序,除其他外,它使用cURL使用PUT方法将文件上传到Web应用程序。我试图复制Web应用程序,因为客户端(bash)部分是GPL但Web部分不是。我也无法改变客户端应用程序,因为它从开发人员的网站自动更新。 我已经找到了大量关于如何使用WSGI,CherryPy,Twisted处理HTTP POST 方法的信息,以及几乎所有使用Python脚本在WWW上工作的方法。但是,我找不到关于 PUT 方法的一件事。有没有人知道如何使用WSGI处理PUT请求,还是有其他一些我缺少PUT功能的框架?

1 个答案:

答案 0 :(得分:3)

据我了解,您只想阅读流environ['wsgi.input'],因为PUT请求会将PUT的全部内容作为请求正文发送。

我不知道您将需要处理的任何编码问题(除了它是二进制的事实)。

前段时间,我编写了一组简单的PHP脚本,用于从LAN上的其他服务器获取大量文件。我们从POST开始,但在较大的文件上很快耗尽了内存。所以我们切换到PUT,PHP脚本可以让它一次循环php://input 4096个字节(或者其他任何东西)......它很棒。

这是PHP代码:

$f1 = fopen('php://input', 'rb');
$f2 = fopen($FilePath, 'wb');

while($data = fread($f1, 4096))
{
    fwrite($f2, $data);
}

fclose($f1);
fclose($f2);

根据我使用multipart/form-data在WSGI中处理POST的经验,我毫不怀疑您只需阅读输入流即可处理PUT

python代码应该是这样的:

  output = open('/tmp/input', 'wb')
  while True:
    buf = environ['wsgi.input'].read(4096)
    if len(buf) == 0:
      break
    output.write(buf)