AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Anfangsposition setzen bei Http-Download
Thema durchsuchen
Ansicht
Themen-Optionen

Anfangsposition setzen bei Http-Download

Ein Thema von bennepalz · begonnen am 6. Jan 2009 · letzter Beitrag vom 6. Jan 2009
 
bennepalz

Registriert seit: 10. Jan 2005
3 Beiträge
 
#1

Anfangsposition setzen bei Http-Download

  Alt 6. Jan 2009, 09:11
Hallo zusammen,

ich möchte gerne die Bewertungen eines Albums von Amazon.de auslesen. Das funktioniert schon alles ohne Probleme.
Um das ganze zu beschleunigen, würde ich gerne erst ab einer bestimmten Position/in einem bestimmten Bereich (100000-150000) den Download durchführen, da ich ungefähr weiß,
wo die Information steht.

1. Möglichkeit: "InternetSetFilePointer" Die funktioniert leider bei mir nicht, und soll auch recht langsam sein
2. Möglichkeit: Den Bereich "Range" über den Header übertragen. Im Internet habe ich einige Beispiel darüber gefunden.
Leider funktioniert es nicht. Ich weiß nicht, ob es einfach an Amazon liegt oder an mir.
Andere Seiten (google) habe ich auch schon ohne Erfolg ausprobiert. Der "Range" Header wird immer ignoriert.
Die meisten Beispiele die ich fand, waren aber genauso programmiert.
Im Header wird auch keine HTTP_QUERY_CONTENT_LENGTH übertragen. Vielleicht funktioniert es deshalb nicht?

Im folgenden ist der Code, mit dem ich gescheitert bin. Vielen Dank schon mal.
Beste Grüße

Delphi-Quellcode:
var
  hOpen, hConnect, hResource: HINTERNET;

  //Hier der Link auf die Amazon Seite: "Guns n Roses - Chinese Democracy"
  Host:String='www.amazon.de';
  Resource:String='/s/ref=nb_ss_w?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=chinese&x=0&y=0';


function DownloadAtPos(const AURL, AFileName: string; APos: Integer): Integer;
var
  FileStream: TFileStream;
  s: string;
  DataProceed: array[0..8191] of Byte;
  numread: DWORD;
begin
  hOpen := InternetOpen('WinInet sample', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  hConnect := InternetConnect(hOpen, PChar(host), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  hResource := HttpOpenRequest(hConnect, 'GET', PChar(resource), nil, nil, nil, 0, 0);

  s := Format('Range: bytes=%d-%d', [100000,150000]); //Setze den zu lesenden Bereich
  HttpAddRequestHeaders(hResource, PChar(s), Length(s), HTTP_ADDREQ_FLAG_ADD_IF_NEW); //schreibe Header

  HttpSendRequest(hResource, nil, 0, nil, 0);

  //Download der Datei
  FileStream := TFileStream.Create(AFileName, fmCreate);
  try
    FileStream.Size:=0;
    FileStream.Position := 0;
    repeat
      ZeroMemory(@DataProceed, SizeOf(DataProceed));
      InternetReadFile(hResource, @DataProceed, SizeOf(DataProceed), numread);
      if (numread <= 0) then Break;
      FileStream.Write(DataProceed, numread);
      Result := Result + Integer(numread);
    until (not FIsDownloading);
  finally

    FileStream.Free();
    InternetCloseHandle(hConnect);
    InternetCloseHandle(hOpen);
  end;
end;

function GetResourceSize(const AURL: string): Integer;
var
  s: string;
  buflen, tmp: DWORD;
begin
  hOpen := InternetOpen('WinInet resuming sample', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  hConnect := InternetConnect(hOpen, PChar(host), INTERNET_DEFAULT_HTTP_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
  hResource := HttpOpenRequest(hConnect, 'HEAD', PChar(resource), nil, nil, nil, 0, 0);
  HttpSendRequest(hResource, nil, 0, nil, 0);

  buflen := SizeOf(Result);
  tmp := 0;
  Result := 0;
  HttpQueryInfo(hResource, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @Result, buflen, tmp);

  InternetCloseHandle(hConnect);
  InternetCloseHandle(hOpen);
end;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz