download von einer dynamischen website. dateiname ???

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
dieHenne
User
Beiträge: 5
Registriert: Montag 5. April 2004, 21:11

hallo zusammen,

ich hab da ein kleines problemchen beim runterladen von dateien über python.

ich möchte eine datei von einem entfernten server über http runterladen.
soweit kein problem.
Allerdings würde ich gerne den dateinamen ermitteln unter dem ich die datei abspeichern sollte.

das ganze problem bei der sache ist, dass die website auf der die datei angeboten wird dynamisch ist und die adresse also etwa so aussieht:

www.seite.tld/download-file.php?id=23456

wenn ich die datei mit firefox bzw. lynx runterlade ermittelt der jeweilige browser den richtigen dateinamen also beispielsweise hihi.txt .

wget beispielsweise kann das aber nicht.
und mein pythonskript au nich :(

weiss jemand zufällig wie man so etwas macht?
bin schon kurz davor einfach lynx in mein tool einzubetten oder den lynx sourcecode durchzuwüten um rauszufinden wie das geht.
google konnte mir leider auch nicht helfen :( (nach download get python .... suchen liefert einfach zu viele ergebnisse ;) )

irgendwo hab ich was über nen filename-header gelesen die HTTPResponse enthält aber leider keinen solchen :(

argh!

Wär echt super wenn mir jemand helfen könnte vom schlauch runterzusteigen ;)

danke schonmal

bis denne

diehenne
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Normalerweise ist das Trennzeichen für die Parameter das Fragezeichen. Schneide doch einfach alles, was nach dem Fragezeichen kommt, ab.
dieHenne
User
Beiträge: 5
Registriert: Montag 5. April 2004, 21:11

das problem is aber, dass die datei ja genau dadurch ausgewählt wird.

auf dem server läuft wohl folgendes programm (pseudocode):

Code: Alles auswählen

id = getvariable("id")
file = get_Datei_zugeordnet_dieser_ID(id)
send_to_client(file)
die get-variablen abzuschneiden bringt also nix da ich dann nur ein fehlerdokument kriegen werde,
statt der gewünschten datei.

hm hab den lynx-sourcecode mal geforstet, aber auf die schnelle die passende stelle nicht gefunden. Ausserdem is mein C etwas rostig *hüstel* ;)

trotzem danke für die antwort, ich habe mich wohl einfach nicht klar genug ausgedrückt.

werd mir das morgen in aller frische nochmals ansehen.

bis denne
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

dieHenne hat geschrieben:das problem is aber, dass die datei ja genau dadurch ausgewählt wird.

auf dem server läuft wohl folgendes programm (pseudocode):

Code: Alles auswählen

id = getvariable("id")
file = get_Datei_zugeordnet_dieser_ID(id)
send_to_client(file)
die get-variablen abzuschneiden bringt also nix da ich dann nur ein fehlerdokument kriegen werde,
statt der gewünschten datei.
Wenn der Server kein Redirect auf die Datei macht, dann hast du keine Chance, den richtigen Dateinamen herrauszufinden.

Wenn das so läuft, wie du das oben beschrieben hast, dann ist der einzige Dateiname, den du hast download-file.php.

Wenn der Server aber ein Redirect macht, dann frag mal bei der url Lib, die Headereigenschaft Location ab. Da sollte dann der richtige Name drinn stehen.
dieHenne
User
Beiträge: 5
Registriert: Montag 5. April 2004, 21:11

ich danke dir oh ProgChild,

hast mir wirklich sehr geholfen.
die seite arbeitet in der tat mit redirects statt wie angenommen mit content-disposition.
daher fehlt auch der header namens filename.

hab das ganze jetzt in etwa so gelöst :

Code: Alles auswählen

import urllib
request = urllib.urlopen("http://www.seite.tld/download-file.php?id=23456")
filename = request.geturl().split("/")[-1]
print filename

na ja ich stand wohl wirklich auf dem schlauch.

nochmals vielen dank und
bis denne

dieHenne

P.S. : Da hab ich mich doch mal wieder gekonnt drumrumgemogelt mit den headern zu jonglieren ;)
Antworten