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
Antwort Antwort
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Anfangsposition setzen bei Htp-Download

  Alt 6. Jan 2009, 09:13
Unterstützt der Server das denn?
Markus Kinzler
  Mit Zitat antworten Zitat
bennepalz

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

Re: Anfangsposition setzen bei Http-Download

  Alt 6. Jan 2009, 09:16
Da ich noch nie mit so etwas programmiert habe, habe ich keine Ahnung wie man das rausbekommt.
Die einzige Infos die ich habe, sind folgende (mit denen ich aber nicht sehr viel anfangen kann)
(Quelle: http://tools.nophia.de/)

Übersicht

Generelle Informationen zur Anfrage:
1. Protokoll: HTTP 1.1
2. Server: www.amazon.de
3. IP: 87.238.83.166
4. Port: 80
5. Pfad: /s/ref=nb_ss_w
6. Query: __mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&field-keywords=c hinese&x=0&y=0


Folgende Anfrage wurde an den Server gesendet:
1. GET /s/ref=nb_ss_w?__mk_de_DE=%C5M%C5Z%D5%D1&url=search-alias%3Daps&f ield-keywords=chinese&x=0&y=0 HTTP/1.1
2. Host: www.amazon.de
3. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 (.NET CLR 3.5.30729)
4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
6. Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
7. Referer: http://tools.nophia.de


Der Server hat folgendermaßen geantwortet:
1. HTTP/1.1 200 OK
2. Date: Tue, 06 Jan 2009 08:58:02 GMT
3. Server: Server
4. x-amz-id-1: 1P54CJNXJZPGDBZGFX8P
5. x-amz-id-2: a5oO/jB4MEmEtoS+PZxSqTuTZeKEFDS8rCNr/Pn4ZNs=
6. Vary: Accept-Encoding,User-Agent
7. Content-Type: text/html; charset=ISO-8859-15
8. Set-cookie: session-id=280-1001382-0862849; path=/; domain=.amazon.de; expires=Mon Jan 12 23:00:00 2009 GMT
9. Transfer-Encoding: chunked
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Anfangsposition setzen bei Http-Download

  Alt 6. Jan 2009, 09:32
Er müsste m.W. Accept-Ranges: ... als Fähigkeit melden
Markus Kinzler
  Mit Zitat antworten Zitat
bennepalz

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

Re: Anfangsposition setzen bei Http-Download

  Alt 6. Jan 2009, 09:41
Und was könnte man tun, wenn er "Range" nicht akzeptiert?
Kann man dann mit sonst einem Trick in der Mitte der Datei mit dem Download beginnen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Anfangsposition setzen bei Http-Download

  Alt 6. Jan 2009, 09:42
Ich verfürchte nein.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:50 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