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

Reply via email to