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';                      //Abbrechen
    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;                         //Ausrechnung des downloadspeeds
    if DLTime > 0 then
    AverageSpeed := (AWorkCount / 1024) / DLTime;         
  
    if not(round(AverageSpeed)=0then 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, 03) + ' Std';                          //zeit verbleibend
        end;
        zeit:=FloatToStr(temp/60);
        zeit:=Copy(zeit, 03) + ' 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), 32) + '%';   //Prozentanzeige
  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 + ')'//anzeige wievielte datei gedownloadet wird
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