3

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

4

1 回答 1

4

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

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

前段时间,我编写了一组简单的 PHP 脚本,用于从 LAN 上的另一台服务器获取和提供大量文件。我们从 POST 开始,但很快就用完了较大文件的内存。所以我们切换到 PUT,PHP 脚本可以花时间一次循环遍历php://input4096 个字节(或其他任何内容)......它工作得很好。

这是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 with中处理的经验POST,我毫不怀疑您可以PUT通过读取输入流来处理 a 。

python代码应该是这样的:

  output = open('/tmp/input', 'wb')
  while True:
    buf = environ['wsgi.input'].read(4096)
    if len(buf) == 0:
      break
    output.write(buf)
于 2011-01-10T00:06:22.147 回答