Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Http/FTP - Download Range begrenzen (https://www.delphipraxis.net/47993-indy-http-ftp-download-range-begrenzen.html)

snapman 19. Jun 2005 01:18


Indy Http/FTP - Download Range begrenzen
 
Hallo,
gibt es bei Indy die Möglichkeit eine Datei nur bis zu einem gewissen Punkt heruntladen zu lassen bzw an einem Bestimmten Punkt zu beginnen?

Mit indy.Request.ContentRangeStart oder End funktioniert es nicht :(

marabu 19. Jun 2005 08:55

Re: Indy Http - Download Range begrenzen
 
Hallo snapman,

ContentRangeStart und ContentRangeEnd funktionieren. Der folgende Code zeigt dir die ersten 50 Zeichen:

Delphi-Quellcode:
with idHTTP do begin
  Request.ContentRangeStart := 0;
  Request.ContentRangeEnd := 50;
  ShowMessage(Get('http://www.google.de'));
end;
Wie hast du es versucht?

Grüße vom marabu

snapman 19. Jun 2005 15:13

Re: Indy Http - Download Range begrenzen
 
Delphi-Quellcode:

httpcli.request.ContentRangeStart:=0;
httpcli.request.ContentRangeEnd:=100;

HttpCli.Get('http://www.beispielseite.de/muster.exe',responsestream);
Dein Beispiel funktioniert übrigens auch nicht. Er lädt IMMER die ganze Googleseite.

marabu 19. Jun 2005 16:03

Re: Indy Http - Download Range begrenzen
 
Was soll ich dazu sagen? Es funktioniert natürlich auch für andere MIME types als text/html - hier ein anderes Beispiel:

Delphi-Quellcode:
var
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  idHTTP.Request.ContentRangeEnd := 0;
  idHTTP.Request.ContentRangeEnd := 99;
  idHTTP.Get('http://localhost/uninstall.exe', ms);
  ShowMessage(IntToStr(ms.Size)); // schreibt 100 raus, inhalt wie erwartet
  ms.Free;
end;
Keine Ahnung was bei dir schief läuft. Vielleicht greifst du über einen Proxy zu?

Freundliche Grüße vom marabu

snapman 19. Jun 2005 16:15

Re: Indy Http - Download Range begrenzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
benutze keinen proxy

habe mal das beispiel von mir angehangen (source/exe) gibt immer die volle grösse aus

marabu 19. Jun 2005 16:29

Re: Indy Http - Download Range begrenzen
 
Ich verwende Indy 9. Aus den unbekannten Properties beim Laden deines Projektes schließe ich, dass du auf Indy 10 umgestellt hast. Da werde ich dir für eine Weile nicht helfen können. Sorry.

marabu

DGL-luke 19. Jun 2005 16:42

Re: Indy Http - Download Range begrenzen
 
dazu kann ich nur sagen: downgrade auf Indy 9 machen.

z.b. IdIRC funktioniert mit Indy 10 auch nicht. irgendwas ist da kaputt, mit Indy 9 gehts aber anstandslos.

gsh 19. Jun 2005 16:52

Re: Indy Http - Download Range begrenzen
 
keine Ahnung warum es bei dir nicht funktioniert aber eine weiss ich Indy 10 hat damit NICHTS zu tun. Denn ich verwende Indy 10 auch bis jetzt ohne Problemme.

Aber ich hab heute aus deiner Inspiration heraus :mrgreen: einen Code-Libary eintrag hinzugefügt. Schau dort mal nach. :thumb:

snapman 19. Jun 2005 17:01

Re: Indy Http - Download Range begrenzen
 
Zitat:

Zitat von marabu
Ich verwende Indy 9. Aus den unbekannten Properties beim Laden deines Projektes schließe ich, dass du auf Indy 10 umgestellt hast. Da werde ich dir für eine Weile nicht helfen können. Sorry.

marabu

Hm du könntest einfach n paar properties löschen/ändern, dann gehts auch mit 9

marabu 19. Jun 2005 18:22

Re: Indy Http - Download Range begrenzen
 
Zitat:

Zitat von snapman
Hm du könntest einfach n paar properties löschen/ändern, dann gehts auch mit 9

Habe die zwei "falschen" properties ignoriert (AuthProxyRetries, ContentRangeInstanceLength). Beim Ausführen arbeitet das Programm dann wie gewünscht und holt 100 Byte vom Server. An dem Server kann es also nicht liegen, nur an deiner Indy-Komponente. Les doch mal in der OH, ob es an ContentRangeInstanceLength liegen kann.

Die erste Zeile ist überflüssig, aber das weisst du.
Delphi-Quellcode:
...
idHTTP.Request.ContentRangeEnd := 0;
idHTTP.Request.ContentRangeEnd := 99;
...
marabu

snapman 19. Jun 2005 20:20

Re: Indy Http - Download Range begrenzen
 
Hallo,
danke für eure Mühe.

Scheint tatsächlich so, als wäre meine Indy Komponente in Delphi 6 futsch. Muss mal schaun ob es ein Update gibt.
Mit der D2005 Indy geht es.

snapman 19. Jun 2005 22:04

Re: Indy Http/FTP - Download Range begrenzen
 
Sagtmal gibt es sowas wie die Ranges auch bei FTP? :cat:
finde garnix

prinz_inzide 21. Jun 2005 15:08

Re: Indy Http/FTP - Download Range begrenzen
 
Zitat:

Zitat von snapman
Sagtmal gibt es sowas wie die Ranges auch bei FTP? :cat:
finde garnix

würd mich auch ma intressiern..

DGL-luke 21. Jun 2005 15:19

Re: Indy Http/FTP - Download Range begrenzen
 
laut protokoll gibt es einen befehl, der den anfang des contents festlegt. RESUME oder so, die übergebene zahl bestimmt das byte-offset für die nächste RETRIEVE-Order.

Ich hab das protokoll aber gerade nicht zur hand.

jfheins 21. Jun 2005 15:22

Re: Indy Http/FTP - Download Range begrenzen
 
Zitat:

Zitat von DGL-luke
Ich hab das protokoll aber gerade nicht zur hand.

Ich aber :mrgreen: :stupid:

Da isses: http://www.w3.org/Protocols/rfc959/4_FileTransfer.html

Basilikum 21. Jun 2005 15:25

Re: Indy Http/FTP - Download Range begrenzen
 
Zitat:

Zitat von DGL-luke
laut protokoll gibt es einen befehl, der den anfang des contents festlegt. RESUME oder so, die übergebene zahl bestimmt das byte-offset für die nächste RETRIEVE-Order.

Restart heisst dieses Kommando; REST ist das entsprechende command verb

DGL-luke 21. Jun 2005 15:29

Re: Indy Http/FTP - Download Range begrenzen
 
exakt, basilikum!

und der vollständigkeit halber:

Zitat:

Zitat von Protokoll
RESTART (REST)

The argument field represents the server marker at which
file transfer is to be restarted. This command does not
cause file transfer but skips over the file to the specified
data checkpoint. This command shall be immediately followed
by the appropriate FTP service command which shall cause
file transfer to resume.


spricch, gleich darauf sollte store/retrieve folgen.

aber wie kann man die range nach oben hin begrenzen? einfach den dl abbrechen? :stupid:

prinz_inzide 21. Jun 2005 15:30

Re: Indy Http/FTP - Download Range begrenzen
 
joa danke!

hab es inzwischen aber grad rausgefunden:
Delphi-Quellcode:
IdFTP1.SendCmd('REST 100',[350]);
IdFTP1.Get('file.txt', 'localfile.txt);
verstehe ich das richtig, dass er dann an position 100 in der datei springt und dann von dort aus 350 bytes sendet?

danke!

DGL-luke 21. Jun 2005 15:36

Re: Indy Http/FTP - Download Range begrenzen
 
kann ich mir nicht vorstellen. wenn dann müsste es wohl so heissen:

Delphi-Quellcode:
IdFTP1.SendCmd('REST',[100]);
IdFTP1.Get('file.txt', 'localfile.txt);
alleine von der logik her. denn der array dahinter gibt ja die parameter an. oder? hab delphi grad nicht zur hand. (wann hab ich eigentlich irgendwas zur hand? :gruebel: :stupid: )

wie bereits gesagt, wie du es nach oben begrenzt, weiss ich nicht.

Basilikum 21. Jun 2005 15:56

Re: Indy Http/FTP - Download Range begrenzen
 
Zitat:

Zitat von DGL-luke
aber wie kann man die range nach oben hin begrenzen? einfach den dl abbrechen? :stupid:

meines Wissens gibt es dazu keine elegantere Methode, als den Transfer mittels ABOR(t) zu unterbrechen (oder per Holzhammer: einfach die Data-Connection zu schliessen).... ein Kommando um im Voraus die Übertragung zu begrenzen habe ich noch nicht angetroffen....

marabu 21. Jun 2005 16:11

Re: Indy Http/FTP - Download Range begrenzen
 
Mein Stand der Erkenntnis: HTTP hat die byte ranges 1995 eingeführt, den Range-Header soll es für FTP schon länger geben. Allerdings habe ich keine Möglichkeit gefunden custom header in einem Indy FTP Client zu verstauen.

marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz