将 curl 命令行转换为 Perl WWW::Curl 或 LWP



我正在尝试复制以下命令行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暗示了很多。

  1. 它将请求的 HTTP 方法设置为 POST。
  2. 它将请求的内容类型设置为多部分/表单数据。
  3. 它组成一个 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可能更容易;看看池上回答。

最新更新