2015-10-15 21 views
0

我想從Perl發出一個POST請求給REST API服務。作爲POST表單參數,該服務需要一個多部分編碼文件。perl中的多部分編碼文件內容

use HTTP::Request::Common; 
use LWP::UserAgent; 

my $file="/path/to/file"; 
my $REST_URL = "/path/to/REST/service"; 
my $ua = LWP::UserAgent->new; 
my $response= $ua->post($REST_URL, ['file' => $file]); 

我寫了上面的代碼。但顯然,REST服務器無法理解POST請求,因爲我只將文件路徑發送到REST服務,而不是多部分編碼的文件內容。任何人都可以請讓我知道如何使文件多部分編碼並將其作爲POST請求發送給REST服務,該服務期望將多部分編碼文件作爲Form參數?

作爲一個方面說明,我實際上希望編寫下面Python代碼的等效Perl代碼。

REST_URL = "/path/to/REST/service" 
SAMPLE_FILE = "/path/to/file" 

with open(SAMPLE_FILE, "rb") as sample: 
    multipart_file = {"file": ("temp_file_name", sample)} 
    request = requests.post(REST_URL, files=multipart_file) 

但是,對於我有限的Python知識,我並不瞭解行multipart_file = {"file": ("temp_file_name", sample)}。我想,這條線正在做什麼的解釋也會對我有所幫助。

+0

你閱讀的文檔[HTTP ::支持::通用(https://metacpan.org/pod/HTTP::Request::Common) ?它會準確告訴你需要做什麼,包括它說要將'form-data'的內容類型指定爲請求標頭的部分。 –

+0

@MattJacob謝謝你的提示。經過一番閱讀,我更瞭解它。 – greenPlanet

回答

0

由於模塊文檔中解釋HTTP::Request::Common

$ua->post($REST_URL, 
    Content_Type => 'form-data', 
    Content  => [ 
    file => [$file] 
    ], 
); 
+0

非常感謝!它有一點改變。由於$文件應該是一個數組引用,並將其視爲文件Part規範。 – greenPlanet

+0

它使用數組引用替換$ file標量後工作。所以我首先聲明一個數組,並將$ file標量作爲該數組的唯一元素。然後在上面的代碼中使用array_ref而不是$ file。我現在更好地理解指令「如果$ form_ref中的某個值是數組引用,那麼它將被視爲文件部分規範」,在[https://metacpan.org/pod/HTTP::Request ::共同] – greenPlanet