Die im HTTP-Standard dafür vorgesehene Methode ist ein HEAD-Request, und den kann man mit den gängigen Perl-UserAgents absetzen. Bei statischen Dateien (Bilder, PDF, ...) funktioniert das recht zuverlässig. Die Länge findet man dann im Header
Content-Length, den man bei WWW::Mechanize und LWP::UserAgent mit der Methode
$response->content_length abfragen kann. Das ist in der Dokumentation etwas versteckt durch die mehrfache Vererbung, implementiert ist die Methode in
HTTP::Headers.
Drei unergiebige Fälle habe ich schon beobachtet:
- Manche Web-Server verbieten HEAD - das sieht man dann am Status.
- Manche Server schicken auch beim HEAD-Request den ganzen Body mit, entgegen dem Standard.
- Manche Server schicken beim HEAD-Request keinen Content-Length Header.
Die letzten beiden Fälle sieht man gelegentlich bei Wiki-Engines, die die Content-Length gar nicht beurteilen können, ohne die Seite dynamisch aufzubauen. Je nachdem, welche dynamische Inhalte da generiert werden, kann die Länge beim nächsten Aufruf schon wieder anders sein.