« バイナリ版Q4Mインストールメモ | メイン | 『 パソナテック10周年記念 PTカンファレンスVol.6 インフラエンジニア討論会2008』 にでます »

WWW::Curlで進捗表示しつつダウンロード

意味のないエントリー

perl - LWP::UserAgentで進捗表示しつつダウンロード

WWW::Curlだとcurlの機能でできるYo

#!/usr/bin/perl

use strict;
use warnings;
use WWW::Curl::Easy;
use File::Basename;

my $uri      = shift || die "$0 http://example.com/big.iso [filename]";
my $filename = shift || basename($uri);

open my $content, '>', $filename or die "$filename:$!";
open(my $header, '>', \my $header_data);

my $curl = WWW::Curl::Easy->new();
$curl->setopt( CURLOPT_WRITEDATA, $content);
$curl->setopt( CURLOPT_WRITEHEADER, $header);
$curl->setopt(CURLOPT_NOPROGRESS, 0);
$curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
$curl->setopt(CURLOPT_TIMEOUT, 30);
$curl->setopt( CURLOPT_URL, $uri );
$curl->perform();


CURLOPT_NOPROGRESSのオプションだけ。
callbackもできるみたい。使い方はWWW::Curlのテストが参考になります

header情報が欲しい場合は、$header_dataをHTTP::HeaderとかでparseすればOK。
その際、s/\r\n/\n/gが必要なので注意

FOLLOWLOCATIONした場合のURIは、

my $effective_uri = $curl->getinfo(CURLINFO_EFFECTIVE_URL)

でとれるのかなぁ。(未確認)