2012-10-10 153 views
4

我正在使用現有的框架來自動化一些apis。 該框架使用HTTP :: Request模塊。我需要編寫一個腳本來上傳文件。 我可以使用HTTP :: Request :: Common模塊,但使用Http :: Request模塊的NOT。 但我需要使用Http :: Request才能完成此操作。 下面的代碼片段:Perl上傳文件使用HTTP ::請求

使用HTTP ::支持:: COMMON \這個作品

$request = POST $uri, 
    Content_Type => 'multipart/form-data', 
    Content => [ 
    file => [$file] 
    ] 
    ; 
    my $results=$ua->request($request) ; 

使用HTTP ::請求\這是不行的,我得到一個錯誤丟失的文件

my $req = HTTP::Request->new("POST", $uri); 
    $req->header(Content_Type => "form-data"); 
    $req->content('file=>$file'); 
    my $res = $ua->request($req); 

有人可以告訴我我在做什麼錯誤在上面的代碼?

回答

6

不幸的是,在POST方法中還有很多事情要比包裝HTTP::Request對象的構造函數(請參閱here)。至少包括(通過代碼從快速掃描)執行以下操作:

  • 修改所述Content-Type頭是multipart/form-data與隨機boundary到indcate該文件數據在所述請求
  • 開始設定內容-Disposition頭到合適的值
  • 讀取文件並存儲在請求主體

我會強烈建議不要試圖做所有手動以上的文件的內容,但它是很難知道你的Ë xact約束以及爲什麼你不能使用HTTP::Request::Common