Интернет решения от доктора Боба | страница 39



Для открытия удаленного файла (или URL) в Интернете, мы должны вызвать функцию InternetOpenURL, которая опять вернет нам хендл. Теперь, для загрузки удаленного файла (URL) на нашу локальную машину, нам осталось сделать только некоторое количество вызовов функции InternetReadFile, очень похожей на функцию BlockRead, которая копирует данные из удаленного файла в буфер данных. Мы можем использовать BlockWrite для записи из буфера в локальный файл, и все это с помощью всего лишь трех WinInet функций (четыре, если считать функцию InternetCloseHandle), мы можем написать простую, но очень быструю FTP программу следующим образом:

>program DrBobFTP;

{$APPTYPE CONSOLE}

>  {$I+}

uses

>    Windows, WinInet;


>    procedure CopyURL(const URL, OutputFile: String);

>    const

>      BufferSize = 1024;

>    var

>      hSession, hURL: HInternet;

>      Buffer: Array[0..Pred(BufferSize)] of Byte;

>      BufferLength: DWORD;

>      f: File;

>    begin

>      hSession := InternetOpen('DrBob',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);

>      try

>        hURL := InternetOpenURL(hSession, PChar(URL), nil,0,0,0);

>        try

>          Assign(f, OutputFile);

>          Rewrite(f,1);

>          repeat

>            InternetReadFile(hURL, @Buffer, BufferSize, BufferLength);

>            write('.');

>            BlockWrite(f, Buffer, BufferLength)

>          until BufferLength = 0;

>          Close(f);

>          writeln('OK') { if we get here, we succeeded }

>        finally

>          InternetCloseHandle(hURL)

>        end

>      finally

>        InternetCloseHandle(hSession)

>      end

>    end;


begin

>    if ParamCount <2 >then

>    begin

>      writeln('Usage: DrBobFTP URL Filename');

>      writeln('Example: DrBobFTP http://www.drbob42.com/ftp/headconv.zip hc.zip')

>    end

>    else

>      CopyURL(ParamStr(1), ParamStr(2))

end.

Конечно, для выполнения данной программы мы также обязаны иметь WinInet.DLL, которая также может быть найдена на Microsoft web сайте.

3.4.4.4.Улучшения?

Если вы читали документацию по WinInet, вы заметили что, там есть функция FindFile, так что вы можете сделать обзор удаленных файлов. И базируясь на этой информации, вы можете написать своего web робота, который может загрузить часть a web сайта (например, те файлы, которые изменились после последнего посещения данного сайта). Все автоматически и без GUI (зато быстро). Для информации, Я работал над подобным сортом инструментария, названного мной RobotBob, который наложил свой глаз на Борландовский web сайт, помогая мне отслеживать новости и события по Борландовским средствам разработки…