Home > Archive > LibWWW > March 2006 > Remote file size (Content-Length) in LWP::Protocol::ftp
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Remote file size (Content-Length) in LWP::Protocol::ftp
|
|
| SATOU Kazuhito 2006-02-16, 4:00 am |
| Hi there,
(libwww-perl-5.803)
Following is my code fragment:
....
my $src = "ftp://...";
my $ua = LWP::UserAgent->new ();
my $res = $ua->head ($src);
my $size = $res->headers->content_length;
....
I want to know the remote file size before retrieval. It fails in some
cases with Internal Server Error. Of course, I know that the
Content-Length may be unknown on server and may be omitted.
In LWP::Protocol::ftp, remote file size (Content-Length) is given by
parsing a message from the FTP server.
ftp.pm
232 my $mess = $ftp->message;
233 LWP::Debug::debug($mess);
234 if ($mess =~ /\((\d+)\s+bytes\)/) {
235 $response->header('Content-Length', "$1");
236 }
Some servers return the following message:
LWP::Protocol::ftp::request: Opening BINARY mode data connection for XXX
(78473 bytes).
It's good!
But others (e.g. Pure-FTPd):
LWP::Protocol::ftp::request: Accepted data connection
30880.0 kbytes to download
It's bad :(
Why not use determinant methods, e.g. Net::FTP size method?
--
Visita Inferiora Terrae Rectificando Invenies Occultum Lapidem
SATOU Kazuhito, Ph.D.
Protein Function Team email: katze@gsc.riken.jp
Protein Research Group phone: +81-45-503-9212
RIKEN Genomic Sciences Center fax : +81-45-503-9210
1-7-22 Suehiro, Tsurumi, Yokohama, Kanagawa 230-0045, Japan
| |
| Gisle Aas 2006-03-07, 7:58 am |
| SATOU Kazuhito <katze@gsc.riken.jp> writes:
> Following is my code fragment:
>
> ...
> my $src = "ftp://...";
> my $ua = LWP::UserAgent->new ();
> my $res = $ua->head ($src);
> my $size = $res->headers->content_length;
> ...
>
> I want to know the remote file size before retrieval. It fails in some
> cases with Internal Server Error.
I would assume the 'Internal Server Error' comes from something else.
At this point you should only have a $size that is undef.
> Of course, I know that the Content-Length may be unknown on server
> and may be omitted.
>
> In LWP::Protocol::ftp, remote file size (Content-Length) is given by
> parsing a message from the FTP server.
>
> ftp.pm
> 232 my $mess = $ftp->message;
> 233 LWP::Debug::debug($mess);
> 234 if ($mess =~ /\((\d+)\s+bytes\)/) {
> 235 $response->header('Content-Length', "$1");
> 236 }
>
> Some servers return the following message:
>
> LWP::Protocol::ftp::request: Opening BINARY mode data connection for XXX
> (78473 bytes).
>
> It's good!
>
> But others (e.g. Pure-FTPd):
>
> LWP::Protocol::ftp::request: Accepted data connection
> 30880.0 kbytes to download
>
> It's bad :(
>
> Why not use determinant methods, e.g. Net::FTP size method?
Seems like a good idea if the RE didn't work out. Patches would be
welcomed.
Regards,
Gisle
|
|
|
|
|