Re: Remote file size (Content-Length) in LWP::Protocol::ftp

Gisle Aas <[email protected]>
Newsgroups gmane.comp.lang.perl.modules.lwp
Message-ID <[email protected]>
SATOU Kazuhito <[email protected]> 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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.