Kon*_*tin 8 upload curl stdin pipe fifo
我的意思是POST一个标准的文件上传表单.在这种情况下,常用命令行包含此开关:
-F "Filedata=@filename.zip"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试提供由linux命令"mkfifo"制作的命名管道时,例如."mkfifo filename.zip",我总是在生产者方面得到一条错误信息:
curl: (23) Failed writing body (1856 != 16384)
Run Code Online (Sandbox Code Playgroud)
并且在fifo的消费者侧也出现了一些错误消息.我在生产者一方用另一个卷曲命令喂了我的fifo,例如:
curl http://example.com/archive.zip > filename.zip
Run Code Online (Sandbox Code Playgroud)
在消费者方面:
curl http://example.com/fileupload.php -F "file=@filename.zip"
Run Code Online (Sandbox Code Playgroud)
当我在fifo的消费者端传递Content-Length HTTP标头时,我在生产者端没有收到错误消息,但是消费者(上传)端仍然出现错误消息,上传失败.
curl http://example.com/fileupload.php -F "file=@filename.zip" -H "Content-Length: 393594678"
Run Code Online (Sandbox Code Playgroud)
我也试过提供cURL文件上传一个非命名管道,导致cURL从stdin读取数据(标记为@ - ),如:
curl -# http://example.com/archive.zip | curl -# http://example.com/fileupload.php -F "file=@-"
Run Code Online (Sandbox Code Playgroud)
在这种情况下上传成功,但下载和上传进度不同步,我可以看到太单独的hashmark进度指示器,一个用于下载,一个用于上载,而是连续而不是同时运行.在该远程文件的顶部始终命名为" - ",但这对我来说不是问题,可以稍后重命名.
进一步注意:我在Ruby命令行IRB/Pry会话中尝试了上述内容,我注意到当我使用Ruby命令"system"来调用管道构造时:
system %Q{curl -# http://example.com/archive.zip | curl -# http://example.com/fileupload.php -F "file=@-"}
Run Code Online (Sandbox Code Playgroud)
在这种情况下我只能看到一个散列标记进度指示器,所以我认为管道工作应该是这样,但我可以在第二种情况下看到两个连续的散列标记进度指示器,如下所示:
%x{curl -# http://example.com/archive.zip | curl -# http://example.com/fileupload.php -F "file=@-"}
Run Code Online (Sandbox Code Playgroud)
对的,这是可能的!
默认情况下,curl 将检查所有提供的参数,找出所有涉及的组件(包括文件)的大小,并在构造的 POST 请求中发送它们。这意味着 curl 将检查本地文件的大小,因此在您使用 fifo 时会中断。因此,您需要对此做些什么!
通过告诉 curl 它应该使用分块编码进行 POST 而不是提前提供完整大小,curl 将改为以流方式读取文件,并允许它变成当时需要的任何大小文件 (fifo) 被读取。
您可以通过设置分块标头来完成此操作,curl 将其用作信号来进行分块请求。
curl -H "Tranfer-Encoding: chunked" -F file=@fifo https://example.com
Run Code Online (Sandbox Code Playgroud)
这不是 curl 的默认行为的原因是这要求接收器使用 HTTP/1.1 或更高版本(curl 在从服务器获得响应之前不知道)。旧的 HTTP/1.0 服务器不会说“块”。
从 stdin 执行 formpost 时,curl 将首先在内存中从 stdin 读取整个文件,然后再执行 POST,以获取内容的大小,以便它可以将其包含在 POST 请求中。
| 归档时间: |
|
| 查看次数: |
1764 次 |
| 最近记录: |