Это прекрасно работает.

наэтот вопрос показал, как легко использовать WinHTTP через импорт библиотеки типов в delphi.

Я импортировал библиотеку типов для WinHTTP, а затем попытался написать вспомогательную функцию загрузки файлов, используя этот API. Вот как далеко я добрался:

Я не могу понять, как сохранить IWinHttpRequest.ResponseStream (объявлен как OleVariant в файле TLB) как поток, на диск.

// IWinHttpRequest is defined by importing type library of WinHTTP.
// Microsoft WinHTTP Services, version 5.1 (Version 5.1) C:\Windows\system32\winhttp.dll
function Download(const url, filename: String): Boolean;
var
   http: IWinHttpRequest;
   wUrl: WideString;
   fs:TFileStream;
   FileStream:IStream;
   sz,rd,wr:Int64;
begin
  try
   wUrl := url;
   http := CoWinHttpRequest.Create;
   http.open('GET', wurl, False);
   http.send(EmptyParam);

   FStatus := http.status; // 200=OK!
   result := FStatus=200;


   if result then
   begin
     fs := TFileStream.Create(filename, fmCreate, fmShareExclusive );
     try
      FileStream := TStreamAdapter.Create(fs, soReference) as IStream;
      sz := http.ResponseStream.Size;
      http.ResponseStream.CopyTo(FileStream,sz,rd,wr);
     finally
         FileStream :=  nil;
         fs.Free;
     end;
   end;
  except
      result := false;
      // do not raise exceptions.
  end;
end;

Выдержка из WinHTTP_TLB.pas:

 IWinHttpRequest = interface(IDispatch)
    ['{016FE2EC-B2C8-45F8-B23B-39E53A75396B}']
    ......
    property ResponseStream: OleVariant read Get_ResponseStream;

Обновление: теперь я получаю исключение во время выполнения о ole вариантах, при вызовеhttp.ResponseStream.CopyTo(...)

 EOleError 'Variant does not reference an automation object'.

Ответы на вопрос(1)

Ваш ответ на вопрос