我编写了一个 Delphi 函数,从另一个应用程序检索网页。
当我使用文件通过
存储信息时,效果很好Result := URLDownloadToFile( nil, PChar( XmlUrl), PChar( XmlFileName_), 0, nil);
当我使用 URLOpenBlocking-stream 时,我得到了正确的信息,但第二次向网络服务器发出请求时,尽管页面已更改,但我得到的是旧页面。
有人知道可能是什么原因吗?
function MyDownloadToBlockingSteam( URL : String; Var bsXmlStr : AnsiString): LongInt;
var
ppStream : ActiveX.IStream;
statstg : TStatStg;
dwRead : Integer;
begin
Result := 1;
bsXmlStr := '';
If (URLOpenBlockingStream(nil, PChar(URL), ppStream, 0, nil) = S_OK) then
Begin
// Resource protection
try
if (ppStream.Stat(statstg, STATFLAG_NONAME) = S_OK) then // Get the stat from the IStream interface
begin
if (statstg.cbSize > 0) then // Make sure size is greater than zero
begin
SetLength ( bsXMLStr, statstg.cbSize+1 );
Result := ppStream.Read( @bsXMLStr[1], statstg.cbSize, @dwRead); // Read from the stream
end;
end;
finally
ppStream:=nil; // Release the IStream interface
end;
end;//If ..
end;
最佳答案
考虑使用 InternetOpenUrl()
和 InternetReadFile()
代替。需要额外编写几行代码才能手动完成 URLOpenBlockingStream()
在内部为您完成的相同操作,但 InternetOpenUrl()
确实有一个 dwFlags
参数,它接受 INTERNET_FLAG_RELOAD 标志以强制从 URL 下载最新数据。 URLOpenBlockingStream()
没有该选项。
关于delphi - URLOpenBlockingStream 给出相同的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074772/