ГлавнаяVB Использование элемента Internet Transfer Control
Использование элемента Internet Transfer Control
Автор Александр Бельбаков
05.04.2002 г.
В этой статье приводится описание основ работы с элементом Internet Transfer Control, который позволяет лёгко скачивать/закачивать файлы с Интернета (с помощью HTTP или FTP), а также работать с FTP серверами.
Элемент Internet Transfer Control предоставляет возможность работы через два наиболее распространённых протокола: Протокол Передачи Гипер Текста (HTTP) и Протокол Передачи Файлов (FTP). Используя элемент Internet Transfer Control, вы можете легко подключиться к любому из серверов, который поддерживает хоть один из этих протоколов, и получать файлы через методы OpenURL или Execute.
Основные операции
Функциональность элемента Internet Transfer Control зависит от протокола, который вы выберите, так как некоторые функции доступны только для одного протокола. Например, метод GetHeader работает только с протоколом HTTP. Но всё равно, есть несколько процедур, общих для обоих протоколов. В основном, для использования любого протокола вы должны:
1. Установить свойство AccessType правильному прокси серверу. 2. Использовать метод OpenURL с соответствующим URL. 3. Использовать метод Execute с соответствующим URL и командой для протокола. 4. Использовать метод GetChunk для получения данных из буфера.
Установка свойства AccessType
Для начала вы должны определить, как вы подключены к Интернету. Если вы в Интранете, то, скорее всего, подключение производится через прокси сервер. Вкратце, прокси сервер - промежуточный сервер между вашим компьютером и серверами Интернета. В основном, прокси сервер выполняет функцию Firewall. Узнать, используется или нет прокси сервер можно в диалоговом окне свойств Интернета (Панель Управления » Интернет » Соединения). Если вы хотите использовать свои параметры прокси сервера, отличающиеся от системных параметров, используйте следующий код:
Совет При использовании метода OpenURL или Execute, вам не требуется устанавливать свойство Protocol. Элемент Internet Transfer Control автоматически установит протокол, исходя из указанного URL.
В URL вы также можете включить параметры. Например, некоторые сервера поддерживают поиск в базе данных. Для этого задайте URL, который будет содержать критерии поиска. Следующий URL выдаст HTML страницу с результатами поиска слова ASP:
Если вы хоите сохранить в файл данные, полученные при помощи метода OpenURL, используйте следующий пример, который сохраняет массив данных в двоичный файл:
Dim strURL As String Dim bData() As Byte ' массив для данных Dim nFile As Integer ' переменная для номера файла strURL = " /vb/dwn/shelldlg.zip" nFile = FreeFile() ' получаем номер свобдного файла bData() = Inet.OpenURL(strURL, icByteArray) 'результат метода OpenURL присваивается массиву и записывается в файл. Open App.Path & "shelldlg.zip" For Binary As #nFile Put #nFile, , bData() Close #nFile
Синхронный и Асинхронный режимы
Метод OpenURL работает в синхронном режиме предачи данных. Это значит, что операция передачи должна произойти раньше, чем другие процедуры произойдут. Поэтому, передача данных должна быть завершена до того, как продолжится выполнение другого кода.
В другом случае, метод Execute работает в асинхронном режиме передачи данных. Когда вызывается метод Execute, он выполняется независимо от других процедур. Поэтому, после вызова этого метода, другие процедуры могут выполняться, пока данные передаются в фоновом режиме. При использовании метода Execute вы должны осуществлять мониторинг состояния соединения, используя событие StateChanged.
Использование метода Execute через протокол FTP
Метод Execute имеет четыре параметра: url, operation, data и requestHeaders. FTP операции требуют только два параметра: url и operation. Например, чтобы получить файл с удалённого компьютера, вы можете использовать следующий код:
Примечание При использовании метода Execute с командами FTP, параметры data и requestHeaders не используются. Их значения передаются в параметре operation через пробел (file1 и file2).
Синтаксис FTP операции таков: [OperationName file1 file2]. Например, чтобы сменить текущую дирректорию используйте команду CD:
Inet.Execute strURL, "CD " & toDir
Список доступных команд:
Команда
Описание
Пример
CD file
Изменяет текущую дирректорию на указанную в параметре file
Execute , "CD docsmydocs"
CDUP
Переходит к родительской папке
Execute , "CDUP"
DELETE file
Удаляет файл, указанный в параметре File
Execute , "DELETE readme.txt"
DIR file
Выводит список дирректрий
Execute , "DIR /mydocs"
GET file1 file2
Получает удалённый файл file1 и сохраняет его в местный файл file2
Execute , "GET getme.txt C:gotme.txt"
MKDIR file
Создаёт новую дирректорию
Execute , "MKDIR /myDir"
PUT file1 file2
Копирует местный файл file1 в файл file2 на удалённом хосте
Execute , "PUT C:putme.txt /putme.txt"
PWD
Возвращает имя текущего каталога
Execute , "PWD"
QUIT
Завершает текущее соединение
Execute , "QUIT"
RECV file1 file2
Тоже, что и GET
Execute , "RECV getme.txt C:gotme.txt"
RENAME file1 file2
Переименовывает файл file1 в файл file2
Execute , "RENAME old.txt new.txt"
RMDIR file
Удаляет указанную дирректорию
Execute , "RMDIR oldDir"
SEND file
Тоже, что и PUT
Execute , "SEND C:putme.txt /putme.txt"
SIZE file
Возвращает размер файла, указанного в параметре file
Execute , "SIZE /largefile.txt"
Использование метода Execute через протокол HTTP
Протокол HTTP позволяет клиенту запрашивать данные с сервера, используя команды GET, HEAD, POST и PUT:
Команда
Описание
Пример
GET
Получает файл, указанный в url
Execute url, "GET"
HEAD
Получает только заголовок файла, указанного в url
Execute url, "HEAD"
POST
Обеспечивает дополнительные данные запроса
Execute url, "POST", strDataFrom
PUT
Заменяет данные в указанном url
Execute url, "PUT", "default.html"
Использование метода GetChunk
Допустим, вы принимаете данные с удалённого сервера в асинхронном режиме, например используя метод Execute с операцией GET. Когда данные будут получены полностью параметр State события StateChanged примет значение icResponseComplete. После этого вы можете использовать метод GetChunk, чтобы получить данные из буфера. Вот пример использования метода GetChunck:
Private Sub Inet1_StateChanged(ByVal State As Integer) Dim vtData As Variant ' переменная для хранения данных Select Case State Case icResponseCompleted ' 12 ' открываем файл для записи Open txtOperation For Binary Access Write As #intFile
' Получаем первый блок данных, используя массив байтов (icByteArray) vtData = Inet1.GetChunk(1024, icString)
Do While LenB(vtData) > 0 Put #intFile, , vtData ' Получаем остальные блоки vtData = Inet1.GetChunk(1024, icString) Loop Put #intFile, , vtData Close #intFile End Select End Sub
Подключение к FTP серверам
Существует два типа FTP серверов по доступу: общие и частные. Общие сервера, судя по названию, открыты для всех. Частные сервера, наоборот, не позволяют вам подключаться к ним, если вы не пользователь сервера.
При подключении к общим серверам в качестве имени пользователя следует передать "anonymous", а в качестве пароля - ваш e-mail. Но этого можно и не делать, так как Internet Transfer Control по умолчанию использует эти значения. Если же вы подключаетесь к частному серверу, то установите все параметры как следует и вызовите метод Execute, как показано ниже:
With Inet1 .URL = "ftp://ftp.natm.ru/" .UserName = "Joe Cocker" .Password = "IuHnKrc8c" .Execute ,"DIR" .Execute ,"CLOSE" End With
В этом примере мы подсоединились к FTP серверу, выполнили команду DIR и закрыли соединение. Из этого примера также видно, что параметр url метода Execute не является обязательным и его можно опустить, предварительно записав его значение в свойство URL.