Seite 1 von 1

Dateigröße via HTTP ?

Verfasst: Mittwoch 21. November 2007, 15:54
von snakeseven
Hallo,
ich muß vor dem Downloaden per Urllib die Größe der Datei ermitteln.
Mit os.stat(url) und os.path.getsize(url) gehts nicht. Hat einer von euch eine Idee?

Grüße, Seven

Verfasst: Mittwoch 21. November 2007, 16:12
von veers

Code: Alles auswählen

u = urllib.urlopen(uri)
info = u.info()
contentType = info.get('Content-Length')
...

Verfasst: Mittwoch 21. November 2007, 16:15
von Leonidas
Statt `Content-Type` ist es eher `Content-Length`, was die Größe der Datei enthält.

Verfasst: Mittwoch 21. November 2007, 16:34
von Y0Gi
Sollte, man darf sich aber nicht darauf verlassen.

Verfasst: Mittwoch 21. November 2007, 16:40
von veers
Leonidas hat geschrieben:Statt `Content-Type` ist es eher `Content-Length`, was die Größe der Datei enthält.
Argh, es wird wohl schon langsam spät für mich :)
Y0Gi hat geschrieben:Sollte, man darf sich aber nicht darauf verlassen.
Definitiv. Aber es ist das Einzige was man vor dem Download hat :)

Verfasst: Mittwoch 21. November 2007, 16:44
von snakeseven
Perfekt! Ich danke euch.
Seven

Verfasst: Mittwoch 21. November 2007, 17:05
von keppla
Y0Gi hat geschrieben:Sollte, man darf sich aber nicht darauf verlassen.
könntest du das etwas ausführen?
Warum kann man sich nicht darauf verlassen? ("Chunked" mal aussen vor)
Der einzige fall, den ich mir vorstellen könnte, wäre, dass der server die Verbindung vor der gelesenen bytezahl abbricht, weil er eine kürzere datei sendet als angegeben.
Ist sie länger, wäre das doch ungültig (filecontent wär dort, wo die header des nächsten request sein sollten), oder irre ich da?

Verfasst: Mittwoch 21. November 2007, 17:59
von BlackJack
Wer zwingt den Client die korrekte Zahl dort anzugeben? Insbesondere wenn es eine Beschränkung gibt, die jemand gerne umgehen möchte, könnte er absichtlich einen kleineren, noch erlaubten Wert senden und dann trotzdem mehr Daten hinterher schieben.

Ob nach der Datei die nächste Anfrage kommt, hängt davon ab, ob Client und Server überhaupt ausgehandelt haben, dass über eine Verbindung mehrere Anfragen gestellt werden können. Das muss man ja nicht machen.

Verfasst: Mittwoch 21. November 2007, 19:20
von Leonidas
BlackJack hat geschrieben:Wer zwingt den Client die korrekte Zahl dort anzugeben? Insbesondere wenn es eine Beschränkung gibt, die jemand gerne umgehen möchte, könnte er absichtlich einen kleineren, noch erlaubten Wert senden und dann trotzdem mehr Daten hinterher schieben.
Hier geht es aber um Server, die in der Regel richtige Werte ausgeben oder eben gar keine (alte Server tun das gerne und Streaming-Server sowieso).

Verfasst: Mittwoch 21. November 2007, 19:36
von Y0Gi
Ich wollte's nur gesagt haben. Es kommt ja auch auf den Verwendungszweck an. Nur wenn der Server einen riesengroßen oder negativen Wert oder Null angibt und dann das Schreiben der empfangenen Daten fehlschlägt, dann sage bitte keiner, er wäre nicht gewarnt worden.

Buffer Overflows fangen auch so an.