我正在尝试复制以下命令行curl:
curl -F file=@myfile.csv 'https://myserver/api/import/data_save.html'
有没有人在www::curl或lwp中有一个例子? 我已经尝试了一整天,甚至不值得我在这一点上发布我的尝试,这只会混淆事情。 谢谢!!!
我想您是在问如何提交带有名为file
的文件字段的表单,该字段填充了文件myfile.csv
的内容。
use LWP::UserAgent qw( );
my $ua = LWP::UserAgent->new();
my $response = $ua->post('https://myserver/api/import/data_save.html',
Content_Type => 'form-data',
Content => [
file => [ 'myfile.csv' ],
],
);
die($response->status_line)
if !$response->is_success;
$ua->post
参数记录在 HTTP::Request::Common 中。
好吧,让我们解开 curl 命令的实际作用,因为-F
暗示了很多。
- 它将请求的 HTTP 方法设置为 POST。
- 它将请求的内容类型设置为多部分/表单数据。
- 它组成一个 MIME 多部分请求正文,其中包含表单元数据,指示"文件"输入是从名为"myfile.csv"的文件提供的,以及包含实际文件内容的部分。
以下是使用 WWW::Curl 复制它的方法:
use WWW::Curl::Easy;
use WWW::Curl::Form;
my $curl = WWW::Curl::Easy->new;
my $form = WWW::Curl::Form->new;
$form->formaddfile('myfile.csv', 'file', "multipart/form-data");
$curl->setopt(CURLOPT_URL, 'https://myserver/api/import/data_save.html');
$curl->setopt(CURLOPT_HTTPPOST, $form);
my $response = $curl->perform;
但LWP可能更容易;看看池上回答。