我正在尝试将文件发布到Web应用程序端点中。问题是在同一请求中,我需要包含数组作为其中一个参数的值。
my $ua = LWP::UserAgent->new();
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
targetLang => 'french',
]);
工作得很好。
但是当我尝试
my $ua = LWP::UserAgent->new();
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
targetLang => ['french','spanish],
]);
我得到
无法打开法语文件:在 C:/Strawberry/perl/site/lib/HTTP/Request/Common.pm 第 154 行没有这样的文件或目录。 HTTP::Request::Common::form_data(ARRAY(0x6800698(, undef, HTTP::Request=HASH(0x6803a70(( 在 C:/Strawberry/perl/site/lib/HTTP/Request/Common.pm 第 67 行
调用
Perl 似乎认为带有语言的数组引用是一个文件。
我做错了什么?
根据 Matt 的回答扩展分辨率:正如我最初忘记提及的那样,语言列表来自用户输入,所以我最终做了这样的事情:
my @languages = (targetLang => 'french', targetLang => 'spanish');
my $ua = LWP::UserAgent->new();
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
@languages,
]);
来自 HTTP::Request::Common docs:
可以通过重复字段来指定多值表单字段 名称或通过传递值作为数组引用。
POST 方法还
multipart/form-data
支持用于 RFC 1867 中指定的基于表单的文件上载。你触发这个 通过将内容类型'form-data'
指定为以下之一来设置内容格式 请求标头。如果$form_ref
中的一个值是数组 引用,然后将其视为文件部分规范...
因此,虽然您通常可以使用数组引用指定多值字段,但数组引用对于multipart/form-data
内容具有特殊意义,您可能必须通过重复字段名称来绕过它:
my $response = $ua->post(
$baseurl_local . 'create',
Content_Type => 'form-data',
Content => [
file => [$file],
targetLang => 'french',
targetLang => 'spanish',
],
);