Можно через win api.
WebLoadStr2 (string,byte),*string
В глобальной map структуре
INCLUDE('WEBCOPY.API','PROTOTYPES')
Перед глобальными include
INCLUDE('WEBCOPY.API','CONSTANTS')
INCLUDE('WEBCOPY.API','STRUCTURES')
По моему, в стандартной поставке есть эти файлики с декларациями.
Код: Выделить всё
WebLoadStr2 FUNCTION (lop:rFileName,lop:flagMessage) ! Объявление процедуры
FilesOpened LONG
Loc:Bytes LONG
Loc:Status LONG
hSession HINTERNET !ссылка на сессию
hUrl HINTERNET !ссылка на remote-файл
MyUrl CSTRING(255) !имя remote-файла
Agent CSTRING('WebCopy 0.000001b') !агент
BufferSize EQUATE(2048) !значение размера буфера для загрузки файла
Buffer Group !буфер для загрузки файла
BYTE,DIM(BufferSize)
End
BufferLength DWORD !размер буфера для загрузки файла (как переменная для передачи адреса в функциях api)
IndexNum DWORD !номер индекса для функции HttpQueryInfo
FileSize DWORD !размер загружаемого файла
Loc:Total DWORD
Loc:Str1 &STRING !
Loc:Str2 &STRING
CODE ! Начало исполняемого кода
!Пример вызова
!loc:Str &String
!
!loc:Str &= WebLoadStr2('http://www.finsofrz.ru/myScript.php',1)
!if ~(loc:Str &= NULL) then message(loc:Str).
!dispose(loc:Str)
MyUrl = clip(lop:rFileName) !имя remote-файла
Loc:Str1 &= NULL
hSession = InternetOpen(Agent,INTERNET_OPEN_TYPE_PRECONFIG,,,0) !открыть сессию
if hSession !если сессия открыта успешно
hUrl = InternetOpenUrl(hSession, myUrl,,0,INTERNET_FLAG_RELOAD,0) !открыть ссылку на remote-файл
if hUrl !если есть ссылка на remote-файл
Loc:Total = 0 !счетчик в буфер загруженных байт
Loc:Str1 &= New(String(BufferSize)) !создать начальный буфер
loop
Buffer = All('<0>') !инициализация буфера
InternetReadFile(hUrl, Buffer, Buffersize, BufferLength) !чтение порции
if BufferLength > 0 !если что-то прочитано
if (Loc:Total + BufferLength) > Size(Loc:Str1) !если буфер мал
Loc:Str2 &= New(String(Loc:Total + BufferLength)) !увеличить его размер
Loc:Str2 = Loc:Str1
dispose(Loc:Str1)
Loc:Str1 &= Loc:Str2
.
Loc:Str1[(Loc:Total + 1):(Loc:Total + BufferLength)] = Buffer !запись загруженного блока в буфер
Loc:Total += BufferLength !увеличить счетчик загрузки
.
Until BufferLength = 0
InternetCloseHandle(hUrl) !закрываем remote-файл
elsif lop:flagMessage = 1
FsMessagePr('Не найден запрос по HTTP!')
.
InternetCloseHandle(hSession) !закрываем сессию
elsif lop:flagMessage = 1
FsMessagePr('Нет доступа по протоколу HTTP!')
.
Return Loc:Str1