【问题标题】:URLOpenBlockingStream gives same pageURLOpenBlockingStream 给出相同的页面
【发布时间】:2012-06-19 22:42:25
【问题描述】:

我编写了一个 Delphi 函数从另一个应用程序中检索网页。

当我使用文件通过

存储信息时,这很好用

结果 := 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;

【问题讨论】:

    标签: delphi webserver


    【解决方案1】:

    考虑改用InternetOpenUrl()InternetReadFile()。手动完成与URLOpenBlockingStream() 在内部为您执行的相同操作将需要几行额外的编码,但InternetOpenUrl() 确实有一个dwFlags 参数,该参数接受INTERNET_FLAG_RELOAD 标志以强制从网址。 URLOpenBlockingStream() 没有那个选项。

    【讨论】:

    • 坦克很多,这是一个完美的解决方案。首先它有效。其次,它更灵活。雅各布
    【解决方案2】:

    您可以通过在 URL 末尾附加一个随机数来避免缓存。详情请见this SO page

    【讨论】:

      【解决方案3】:

      您也可以使用URLDownloadToFile()URLOpenBlockingStream() 如果你先打电话给DeleteUrlCacheEntry()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-09
        • 2012-12-19
        相关资源
        最近更新 更多