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

convert curl command line to Perl WWW::Curl or 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. 它将请求的内容类型设置为multipart/form-data。
  3. 它由一个 MIME 多部分请求正文组成,其中包含表示 "file" 输入是从名为 "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 可能更容易;看池上的回答。