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

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

内容简介:翻译自: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的文件?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

Web Data Mining

Web Data Mining

Bing Liu / Springer / 2006-12-28 / USD 59.95

Web mining aims to discover useful information and knowledge from the Web hyperlink structure, page contents, and usage data. Although Web mining uses many conventional data mining techniques, it is n......一起来看看 《Web Data Mining》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码