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