内容简介:翻译自: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的文件?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 带有列表的Spring @Cacheable方法
- 速度不够,管道来凑——Redis管道技术
- python – 带有分档范围的熊猫条形图
- BSPreloadTableVew带有预加载功能的tableView
- KDevelop 5.4 正式发布,带有 Meson 支持
- Vulkan 1.1.128 发布,带有性能查询扩展
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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版)》 这本书的介绍吧!