是否可以从管道上传带有cURL的文件?

栏目: 服务器 · 发布时间: 5年前

内容简介:翻译自:https://stackoverflow.com/questions/31504531/is-it-possible-to-upload-a-file-with-curl-from-a-pipe

我的意思是POST一个标准的文件上传表单.在这种情况下,常用命令行包含此开关:

-F "Filedata=@filename.zip"

但是,当我尝试提供由 linux 命令“mkfifo”制作的命名管道时,例如. “mkfifo filename.zip”,我总是在生产者端得到一条错误信息:

curl: (23) Failed writing body (1856 != 16384)

并且在fifo的消费者侧也出现了一些错误消息.我在生产者一方用另一个curl命令喂了我的fifo,例如:

curl http://example.com/archive.zip > filename.zip

在消费者方面:

curl http://example.com/fileupload.php -F "file=@filename.zip"

当我在fifo的消费者端传递Content-Length HTTP标头时,我在生产者端没有收到错误消息,但是消费者(上传)端仍然出现错误消息,上传失败.

curl http://example.com/fileupload.php -F "file=@filename.zip" -H "Content-Length: 393594678"

我也试过给cURL文件上传一个非命名管道,导致cURL从stdin读取数据(标记为@ – ),如:

curl -# http://example.com/archive.zip | curl -# http://example.com/fileupload.php -F "file=@-"

在这种情况下上传成功,但下载和上传进度不同步,我可以看到太单独的hashmark进度指示器,一个用于下载,一个用于上载,而是连续且不同时运行.在该远程文件的顶部始终命名为“ – ”,但这对我来说不是问题,可以稍后重命名.

进一步注意:我在 Ruby 命令行IRB / Pry会话中尝试了上述内容,我注意到当我使用Ruby命令“system”调用管道构造时:

system %Q{curl -# http://example.com/archive.zip | curl -# http://example.com/fileupload.php -F "file=@-"}

在这种情况下我只能看到一个散列标记进度指示器,所以我认为管道工作应该是这样,但我可以在第二种情况下看到两个连续的散列标记进度指示器,如下所示:

%x{curl -# http://example.com/archive.zip | curl -# http://example.com/fileupload.php -F "file=@-"}

对的,这是可能的!

默认情况下,curl将检查所有提供的参数,找出所有相关组件(包括文件)的大小,并在构造的POST请求中发送它们.这意味着curl将检查本地文件的大小,因此当你使用fifo时它会中断.因此,你需要做点什么!

为了fifo

通过告诉curl它应该使用分块编码进行POST而不是提前提供完整大小,curl将以流方式读取文件,并且只允许它变为当时需要的任何大小.读取文件(fifo).

您可以通过设置chunked标头来执行此操作,该标头由curl用作执行请求分块的信号.

curl -H "Tranfer-Encoding: chunked" -F file=@fifo https://example.com

警告

这不是curl的默认行为的原因是这需要接收器使用HTTP / 1.1或更高版本(curl在从服务器获得响应之前不知道).旧的HTTP / 1.0服务器不会说“块”.

来自stdin的formpost

当从stdin执行formpost时,curl将在执行POST之前首先在内存中读取整个文件,以获取内容的大小,以便它可以包含在POST请求中.

翻译自:https://stackoverflow.com/questions/31504531/is-it-possible-to-upload-a-file-with-curl-from-a-pipe


以上所述就是小编给大家介绍的《是否可以从管道上传带有cURL的文件?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Windows核心编程(第5版)

Windows核心编程(第5版)

Jeffrey Richter、Christophe Nasarre / 葛子昂、周靖、廖敏 / 清华大学出版社 / 2008-9 / 99.00元

这是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。. 作为Windows开发人员的必备参考,本书是为打算理解Windows的C和C++程序员精心设计的。第5版全面覆盖Windows XP,Windows Vista和Windows Server 2008中的170个新增函数和Windows特性。书中还讲解了Windows......一起来看看 《Windows核心编程(第5版)》 这本书的介绍吧!

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具