Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   download ohne cache.. (https://www.delphipraxis.net/173745-download-ohne-cache.html)

napstar 13. Mär 2013 20:15

download ohne cache..
 
hey.. für heute ist das mal meine letzte frage :))..

ich hab diesen code bei swissdelphicenter gefunden

Code:
function DownloadURL_NOCache(const aUrl: string; var s: String): Boolean;
var
  hSession: HINTERNET;
  hService: HINTERNET;
  lpBuffer: array[0..1024 + 1] of Char;
  dwBytesRead: DWORD;
begin
  Result := False;
  s := '';
  // hSession := InternetOpen( 'MyApp', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0);
  hSession := InternetOpen('MyApp', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  try
    if Assigned(hSession) then
    begin
      hService := InternetOpenUrl(hSession, PChar(aUrl), nil, 0, INTERNET_FLAG_RELOAD, 0);
      if Assigned(hService) then
        try
          while True do
          begin
            dwBytesRead := 1024;
            InternetReadFile(hService, @lpBuffer, 1024, dwBytesRead);
            if dwBytesRead = 0 then break;
            lpBuffer[dwBytesRead] := #0;
            s := s + lpBuffer;
          end;
          Result := True;
        finally
          InternetCloseHandle(hService);
        end;
    end;
  finally
    InternetCloseHandle(hSession);
  end;
end;

//aufrufen
var
  s: String;
begin
 if DownloadURL('http://www.swissdelphicenter.ch/', s) then
   ShowMessage(s);
end;
meine frage... was ist denn eigentlich hier s? wo wird die datei gespeichert?... wasn das :D..?

Sir Rufo 13. Mär 2013 20:32

AW: download ohne cache..
 
Der Response ist in
Delphi-Quellcode:
s
zu finden

napstar 14. Mär 2013 11:45

AW: download ohne cache..
 
also ist die runtergeladene datei in s gespeichet??
und wie speicher ich es ab?
s.safetofile()???
bin nicht zuhause und kann es leider grafe nicht testen

p80286 14. Mär 2013 11:53

AW: download ohne cache..
 
Da S ein String ist geht das so nicht.
Du könntest es mit einem Filestream machen
Delphi-Quellcode:
..fs.write(s[1],length(s)*sizeof(char))
oder mit einer Stringlist:
Delphi-Quellcode:
stl.text:=s;
stl.savetofile('irgendeinedatei');
So als Anregung.

Gruß
K-H

Klaus01 14. Mär 2013 11:55

AW: download ohne cache..
 
.. Du könntest Dir die Routine auch entsprechend umbauen und in einen FileStream speichern/schreiben.

Ein String ist sowieso nicht ideal, wenn Du nicht ascii Dateien laden willst.

Grüße
Klaus

Blup 14. Mär 2013 12:02

AW: download ohne cache..
 
Für Download ohne Cache:
INTERNET_FLAG_RELOAD + INTERNET_FLAG_PRAGMA_NOCACHE

generic 14. Mär 2013 14:18

AW: download ohne cache..
 
ggf. wird trotzdem ein Cache aktiv.

Mit einen zufälligen Queryparameter hat man das Problem dann garantiert nicht mehr.

napstar 15. Mär 2013 18:14

AW: download ohne cache..
 
ich hab das ganze mal in ner tstringlist gespeichert.. dann wie hier vorgeschlagen per safetofile abgespeichert..
jetzt habe ich 2 probleme...
wenn die datei nicht existiert die heruntergeladen werden soll.. dann ist die erstellte datei 1,23 KB groß...
und wenn die datei existiert hab ich auch ein problem.. unzwar.. die testdatei die runtergeladen werden soll ist 46,9 KB.. nun ist aber die abgespeicherte datei 21,5 KB groß..
bevor ich es in die funktion einbaue hab ich das mal so ausprobiert..

Code:
var stl:TStringList;
    s:string;
begin
  stl:= TStringList.Create;
  DownloadURL_NOCache('http://******/bild.jpg', s);
  stl.text:=s;
  stl.savetofile('C:\*****\test.jpg');
  stl.Free;
wie man sieht ist es ne jpg datei.. und natürlich kann ich sie auch nicht öffnen nach dem "runterladen" :)

DeddyH 15. Mär 2013 19:11

AW: download ohne cache..
 
Nimm doch mal statt des Strings einen Stream, z.B. TMemoryStream.

napstar 15. Mär 2013 19:54

AW: download ohne cache..
 
da ich eigentlich noch am anfang bin in sachen delphi.. habe ich mich mal bisschen über streams schlau gemacht..
leider habe ich es nicht geschafft es umzusetzen..

hier scheiterts.. :(
Code:
s.write(s + lpBuffer);


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 Uhr.
Seite 1 von 2  1 2      

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