使用perl LWP PUT方法静默上载文件失败

时间:2016-02-19 20:57:26

标签: perl lwp lwp-useragent

我正在尝试使用与此类似的代码将文件上传到public API

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子例程? 如何进一步调试?

2 个答案:

答案 0 :(得分: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

现在,您将从请求和打印到终端的响应中获得大量调试信息。这应该有希望给你一个很好的起点来弄清楚发生了什么。

答案 1 :(得分:0)

最后我决定使用curl,我得到一个免费的动态状态行

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; }
 }

不是我最自豪的代码,而是......