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
download von einer dynamischen website. dateiname ???
Normalerweise ist das Trennzeichen für die Parameter das Fragezeichen. Schneide doch einfach alles, was nach dem Fragezeichen kommt, ab.
das problem is aber, dass die datei ja genau dadurch ausgewählt wird.
auf dem server läuft wohl folgendes programm (pseudocode):
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
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)
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
Wenn der Server kein Redirect auf die Datei macht, dann hast du keine Chance, den richtigen Dateinamen herrauszufinden.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):
die get-variablen abzuschneiden bringt also nix da ich dann nur ein fehlerdokument kriegen werde,Code: Alles auswählen
id = getvariable("id") file = get_Datei_zugeordnet_dieser_ID(id) send_to_client(file)
statt der gewünschten datei.
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.
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 :
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
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
nochmals vielen dank und
bis denne
dieHenne
P.S. : Da hab ich mich doch mal wieder gekonnt drumrumgemogelt mit den headern zu jonglieren