For Programmers: Free Programming Magazines  


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
Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com