2016-02-19 34 views
0

我想上傳一個文件到一個public API用類似下面的代碼:上傳用Perl LWP PUT方法silency文件失敗

my $ua = LWP::UserAgent->new; 
sub uploadbox { 
    my $url = "http://host/token"; 
    my $response = $ua->put($url, 
     'Content_Type' => 'form-data', 
     'Content' => [ 
      Filedata => [ "$codename.box", "$codename.box", Content_type => 'application/octet-stream' ] 

     ] 
    ); 
} 
uploadbox(); 

此代碼運行,並退出,不上傳任何東西(上傳的文件是300MB大,所以它需要時間)。

我是否將正確的參數傳遞給put子例程? 如何進一步調試呢?

+0

這些代碼不會做任何事情都是因爲'uploadbox'永遠不會被調用。所有它編譯'LWP :: UserAgent'及其依賴模塊,創建一個對象,然後退出 – Borodin

+0

我打電話給uploadbox();下一行,只是更新了代碼 – Manu

+2

也許看'$ response'來查看錯誤是什麼? – cjm

回答

0

我喜歡用LWP::ConsoleLogger::Easy來調試LWP::UserAgent腳本。 (免責聲明:這是我自己的模塊之一)。

use LWP::ConsoleLogger::Easy qw(debug_ua); 
my $ua = LWP::UserAgent->new; 
debug_ua($ua); 

# insert the rest of your code here 

您現在將從打印到終端的請求和響應中獲得大量的調試信息。這應該有希望給你一個很好的起點,找出發生了什麼。

0

最終我決定使用捲曲,我也得到了免費

sub uploadbox { 
    my ($url) = @_; 
    my $curl = "curl -X PUT $url --upload-file $codename.box"; 
    $OUTPUT_AUTOFLUSH = 1; 
    open(CURL, '-|', $curl,) or die "error: $ERRNO"; 
    while (<CURL>) { say; } 
} 

不是代碼中的動態狀態行我最自豪的,但...