Guten Tag,
habe mal wieder ein Problem mit WinInet...mit meiner Funktion GetData (siehe unten) rufe ich einen PHP-Skript auf, der prüft, ob bestimmte Dateien auf dem Server vorhanden sind. Angenommen es wird geprüft ob die Datei
Test.dat vorhanden ist, dann resultiert der Skript z.B. "'Test.dat' exists", wenn nicht, dann einen leeren String.
Wenn ich nun die Fkt. aufrufe und die Datei existiert, dann bekomme ich richtigerweise den Text "'Test.dat' exists" zurück. Sobald ich aber die Datei löschen und nochmal den Skipt mit der Fkt. aufrufe, bekomme ich immer noch den Text zurück, der sagt dass, sie existiert. Wenn ich parallel dazu den Skipt im FF ausführe, bekomme ich das richtige ergebnis zurück (leerer String).
Es dauert dann ca. 7 Aufrufe der Fkt.
GetData, bis ich ein richtiges Ergebnis bekomme. Ich vermute stark, dass einfach noch das alte Ergebnis im Cache liegt...Bis jetzt habe ich einfach versucht, den Cache nach dem Öffnen zu löschen:
InternetSetOption(hOpen,INTERNET_OPTION_RESET_URLCACHE_SESSION,0,0); Hat aber nichts gebracht.
Hier mein gesamter Code:
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:
| function THTTPUploader.GetData(RemoteFile: string): string; var hOpen, hURL: HINTERNET; Buffer: array[0..1023] of AnsiChar; n, BufferLen: Cardinal; begin hOpen:= InternetOpen(PChar(FDesc), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); hURL:= InternetOpenUrl(hOpen, PChar('http://' + FHost +'/'+ RemoteFile), nil, 0, 0, 0); try if Assigned(hURL) then begin repeat InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen); if BufferLen = SizeOf(Buffer) then result:= result + AnsiString(Buffer) else if BufferLen > 0 then for n:= 0 to BufferLen - 1 do result:= result + Buffer[n]; until BufferLen = 0; end; finally InternetSetOption(hOpen,INTERNET_OPTION_RESET_URLCACHE_SESSION,0,0); InternetCloseHandle(hURL); InternetCloseHandle(hOpen); end; end; |
Habt ihr irgendwelche Ideen, wie ich den Cache gelöscht bekomme?
Viele Grüße,
Littleben