Entwickler-Ecke
Internet / Netzwerk - http Link downloaden
the-kecks - Di 29.09.09 15:08
Titel: http Link downloaden
hi,
ich möchte ein programm schreiben welches eine datei (http://seite.de/file/[zufällig generierter code]) downloadet. nur weiß ich nicht wie ich das machen soll. wär nett wenn ihr mir eine komponente empfehlen könnt oder einen kleinen denkanstoß gebt ;)
mfg
Nersgatt - Di 29.09.09 15:10
Ich werfe einfach mal IdHttp in der Raum. Such mal danach.
the-kecks - Di 29.09.09 15:12
kenne ich...nur wie downloade ich damit ein file?
wenn ich den IdHTTP1.Get(Link, FileStream) mache kommt nur die startseite als .html file raus.
PS: es handelt sich bei der seite um uploaded.to
mfg
jaenicke - Mi 30.09.09 01:22
Du musst die Schritte halt genauso nachvollziehen. Codeeingabe usw., was halt alles passiert. Dafür musst du in den Quelltext der Seite schauen bzw. kannst einen Blick in Firefox-Addons wie HttpFox, Firebug usw. werfen.
the-kecks - So 04.10.09 16:20
das downloaden klappt jetzt soweit nur ich krieg sobald der download angefangen hat immer die fehlermeldung "ungültige gleitkommaoperation"
hier meine OnWork (-Begin, -End) ereignisse:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74:
| procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer); var TotalTime: TDateTime; H, M, Sec, MS: Word; DLTime: Double; AverageSpeed, temp : Extended; zeit : String; begin if bAbort=true then begin IdHTTP1.Disconnect; Button1.Enabled:=true; Button2.Enabled:=false; Statusbar1.Panels[0].Text:='Fertig'; Statusbar1.Panels[1].Text:='Speed: 0 KB/s'; Application.ProcessMessages; exit; end; If ProgressDownloading=true then begin ProgressBar1.Position := AWorkCount;
TotalTime := Now - STime; DecodeTime(TotalTime, H, M, Sec, MS); Sec := Sec + M * 60 + H * 3600; DLTime := Sec + MS / 1000; if DLTime > 0 then AverageSpeed := (AWorkCount / 1024) / DLTime; if not(round(AverageSpeed)=0) then temp:=round(((ProgressBar1.Max - AWorkCount) / 1024) / round(AverageSpeed)) else temp:=0; if temp>0 then begin if temp>=60 then begin if temp>=3600 then begin zeit:=FloatToStr(temp/60); zeit:=Copy(zeit, 0, 3) + ' Std'; end; zeit:=FloatToStr(temp/60); zeit:=Copy(zeit, 0, 3) + ' Min'; end else zeit:=FloatToStr(temp) + ' Sek'; end else zeit:='0 Sek';
StatusBar1.Panels[1].Text := 'Speed: ' + FloatToStr(round(AverageSpeed)) + ' KB/s' + ' (' + zeit + ' verbleibend)';
temp:=ProgressBar1.Position/Progressbar1.Max; Label5.Caption:=Copy(FloatToStr(temp), 3, 2) + '%'; end; Application.ProcessMessages; end;
procedure TForm1.IdHTTP1WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Integer); begin STime:=Now; ProgressBar1.Max := AWorkCountMax; ProgressBar1.Position := 0; if ProgressDownloading=true then StatusBar1.Panels[0].Text := 'Download (' + AktDatei + '/' + Memo1.Lines.Count + ')'; end;
procedure TForm1.IdHTTP1WorkEnd(ASender: TObject; AWorkMode: TWorkMode); begin StatusBar1.Panels[1].Text := 'Speed: 0 KB/s'; Statusbar1.Panels[0].Text:='Fertig'; Label5.Caption:= '0%'; ProgressBar1.Position := 0; end; |
mfg
jaenicke - So 04.10.09 16:42
Da wird wohl irgendetwas 0 werden, durch das du teilst, nehme ich an. Da es dabei nur um die Anzeige des Fortschritts geht, kannst du ja z.B. einfach Teile des Codes schrittweise auskommentieren um den Fehler zu finden. Oder eine Loggingfunktion einbauen um festzustellen wo der Fehler genau auftritt. Oder debuggen. Oder...
the-kecks - So 04.10.09 17:40
genau das habe ich gemacht...
immer wenn ich geteilt habe, hab ich eine haltemarke davor gesetzt. bei jeder haltemarke kam dieses grüne häckchen
hab den fehler gefunden:
Delphi-Quelltext
1: 2: 3:
| AverageSpeed := (AWorkCount / 1024) / DLTime; --> AverageSpeed := (AWorkCount / 1024) / round(DLTime); |
mfg
pesi - Mo 05.10.09 20:47
Ähem... was ist mit dem guten alten Befehl UrlDownloadToFile ???
Der is easy zu nutzen, braucht keine Zusatzkompos und ist bestimmt auch noch bei neuern Delphiversionen vorhanden, oder??? Bei D5 und Turbodelphi gibt´s ihn jedenfalls!
Gruß Peter
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!