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