2012-06-17 8 views
2

Я написал функцию Delphi, которая извлекает веб-страницу из другого приложения.URLOpenBlockingStream дает ту же страницу

Это прекрасно работает, когда я использую файл для хранения информации с помощью

Результат: = URLDownloadToFile (ноль, PChar (XmlUrl), PChar (XmlFileName_), 0, ноль);

Когда я использую 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; 

ответ

3

Используйте вместо этого InternetOpenUrl() и InternetReadFile(). Требуется несколько дополнительных строк кодирования, чтобы вручную выполнить то же самое, что и URLOpenBlockingStream() делает для вас, но InternetOpenUrl() имеет параметр dwFlags, который принимает флаг INTERNET_FLAG_RELOAD, чтобы принудительно загрузить последние данные из URL-адреса. URLOpenBlockingStream() не имеет этого варианта.

+0

Танки много, это идеальное решение. Прежде всего это работает. Во-вторых, это намного более гибко. Иаков – Jacobvst

1

Вы можете избежать кеширования, добавив случайное число в конец URL-адреса. Для получения дополнительной информации см. this SO page.

+1

Хороший трюк, полезно знать, что – Hendra

Смежные вопросы