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

时间:2016-06-06 19:54:37

标签: perl curl lwp

我正在尝试复制以下命令行curl:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();
    services.AddDbContext<OdeToFoodDbContext>(options => options.UseSqlServer(Configuration["database:connection"]));
    services.AddSingleton(p => Configuration);
    services.AddSingleton<IGreeter, Greeter>();
    services.AddScoped<IRestaurantData, SqlRestaurantData>();
}

public class OdeToFoodDbContext : DbContext
{
    public DbSet<Restaurant> Restaurants { get; set; }
}

有没有人在www :: curl或lwp中有一个例子?我一整天都在努力,在这一点上我甚至不值得发布我的尝试,这只会让事情变得混乱。谢谢!!!

2 个答案:

答案 0 :(得分:4)

我想您正在询问如何提交一个表单,其中包含一个名为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

答案 1 :(得分:2)

好吧,让我们解压缩curl命令实际执行的操作,因为-F意味着很多。

  1. 它将请求的HTTP方法设置为POST。
  2. 它将请求的Content-Type设置为multipart / form-data。
  3. 它组成一个MIME多部分请求主体,其表单元数据指示“file”输入是从名为“myfile.csv”的文件中提供的,以及包含实际文件内容的部分。
  4. 以下是使用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可能更容易;看到ikegami的回答。