簡體   English   中英

Perl - HTTP :: Request :: Common - POST文件和數組

[英]Perl — HTTP::Request::Common — POST file AND array

我正在嘗試將文件POST到webapp端點。 問題是在同一個請求中我需要將數組包含為其中一個參數的值。

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文檔

可以通過重復字段名稱或將值作為數組引用傳遞來指定多值表單字段。

POST方法還支持RFC 1867中指定的用於基於表單的文件上載multipart/form-data內容。您可以通過將'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',
    ],
);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM