使用curl通过POST发送内容类型为multipart/form-data的二进制文件;

使用curl通过POST发送内容类型为multipart/form-data的二进制文件;

邮寄请求发送至:

http://www.example.com/example/

帖子数据如下:

------WebKitFormBoundaryB8NNdk2kNdndnnn
Content-Disposition: form-data; name="picture[uploaded_data]"; filename="picture.jpg"
Content-Type: image/jpeg

binarydatagoeshere
------WebKitFormBoundaryB8NNdk2kNdndnnn--

所以我的问题是,我如何使用curl 对 picture.jpg 的二进制数据执行完全相同的操作?我知道 --data-binary @myfile.bin,但这完全不同,在这种情况下,边界之后的字符串(例如B8NNdk2kNdndnnn在这种情况下)需要有效才能使请求通过。那么我该如何使用curl 来完成这一切呢?

答案1

我认为该--form选项应该满足您的需要:

curl --form "picture[uploaded_data][email protected];type=image/jpeg" http://www.example.com/example/

答案2

这是一个示例脚本发布多部分。你需要稍微调整一下:

#!/usr/bin/env perl

use strict; use warnings;
use WWW::Mechanize;

my $m = WWW::Mechanize->new(
    autocheck => 1,
    agent_alias => 'Mozilla',
    cookie_jar => {},
    ssl_opts => {verify_hostname => 0},
    quiet => 0,
);
$m->get("http://domain.tld");                                                   

$m->post('https://domain.tld/send',
    Content_Type => "form-data",
    Content => [
        'picture[uploaded_data]' => 'foobar',
        file => [ '/path/to/image', 'image_name', 'Content-Type' => 'image/jpeg' ]
    ]
);

print $m->content;

查看http://search.cpan.org/~gaas/HTTP-Message-6.06/lib/HTTP/Request/Common.pm

相关内容