delphi - URLOpenBlockingStream 给出相同的页面

标签 delphi webserver

我编写了一个 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/

相关文章:

java - Typical Requests/Second a "server"能处理吗?

java - java代码可以在服务器上编译吗?

delphi - 类似于 Delphi 的 jSon_encode 函数,它接受 TDataSet

delphi - 使用多线程时如何使用Delphi设计时FireDac TFDQuery?

forms - Delphi中如何访问父窗体

java - 没有网络服务器的 Spring Cloud Starter Eureka

即使使用与其他域一起使用的 DocumentRoot,Apache 也会导致 403 禁止

windows - Delphi FMX TMainMenu 第一个菜单项在 OSX 中不显示,在 WIndows 中正常

delphi - 确定双击是否在TDBGrid的标题中

.net - IIS 是 Web 服务器还是应用程序服务器?