|
|||||||||||||||||||
|
|
||||||||||||||||||
Для начала, рассмотрим функции, необходимые для работы: Dial-Up InternetAutodial Как сказано на msdk, "Causes the modem to automatically dial the default Internet connection", у меня просто вызывал диалог подключения InternetAutodial( dwFlags:Cardinal; hwndParent:hWnd ):BOOLEAN; Параметры dwFlags Параметры операции. Принимает следующие значения: INTERNET_AUTODIAL_FAILIFSECURITYCHECK InternetAutodialHangup Отсоединяет модем от линии. InternetAutodialHangup( dwReserved:Cardinal ):BOOLEAN; Параметры dwReserved Зарезервировано. Должно быть 0. Возвращает TRUE при успешном результате, FALSE в противном случае. InternetGetConnectedState Возвращает состояние соединения InternetGetConnectedState( var lpdwFlags:Cardinal; dwReserved:Cardinal ):BOOLEAN; Параметры lpdwFlags Свойства соединения. Флаги: INTERNET_CONNECTION_CONFIGURED Работа с интернет InternetOpen Инициализирует соединение с интернет. InternetOpen( lpszAgent:PChar; dwAccessType:Cardinal; lpszProxyName:PChar; lpszProxyBypass:PChar; dwFlags:Cardinal ):hInternet; Параметры lpszAgent строка символов, которая передается серверу и сообщает ему название программы, пославшей запрос dwAccessType Параметры доступа. Принимает следующие значения: INTERNET_OPEN_TYPE_DIRECT обрабатывает локально имена host'ов INTERNET_FLAG_ASYNC InternetCloseHandle Закрывает описатель интернет соединения InternetCloseHandle( HINT:hInternet ):BOOLEAN; Параметры hInternet hInternet описатель, который следует закрыть Возвращает TRUE если описатель успешно закрыт и FALSE в противном случае InternetConnect Открывает FTP, Gopher, или HTTP сессию для данног файла сайта InternetConnect( HINT:hInternet; lpszServerName:PChar; nServerPort:INTERNET_PORT; lpszUserName:PChar; lpszPassword:PChar; dwService:Cardinal; dwFlags:Cardinal; dwContext:PCardinal ):hInternet; Параметры hInternet hInternet описатель, полученный от вызова InternetOpen lpszServerName Указатель на строку, содержащую имя host'а интернет сервера, или IP адрес сайта формата a.b.c.d(например, 255.0.0.0) nServerPort Номер TCP/IP порта, через который будет установлена связь с сервером. Вы можете использовать следующие константы INTERNET_DEFAULT_FTP_PORT Стандартный порт для FTP сервера (порт 21) INTERNET_SERVICE_FTP FTP сервис lpszUsername lpszPassword Имя пользователя Пароль, отсылаемый на FTP сервер InternetOpenUrl Чтение файла с данным URL должно начаться с этой функции. InternetOpenUrl( HINT:hInternet; lpszUrl:PChar; lpszHeaders:PChar; dwHeadersLength:Cardinal; dwFlags:Cardinal; dwContext:PCardinal ):hInternet; Параметры hInternet HINT- описатель интернет сессии, полученный вызовом функции InternetOpen lpszUrl Указатель на строку, содержащую URL файла. Поддерживаются URL начинающиеся с ftp:, gopher:, http:, или https: lpszHeaders Указатель на строку, содержащую заголовок запроса HTTP. dwHeadersLength Длина строки заголовка. Если значение этого параметра -1, то длина вычисляется автоматически dwFlags Дополнительные параметры. Вы можете использовать следующие флаги: INTERNET_FLAG_EXISTING_CONNECT InternetReadFile Чтение информации из описателя, полученного от функций InternetOpenUrl, FtpOpenFile, GopherOpenFile, или HttpOpenRequest. InternetReadFile( hFile:hInternet; lpBuffer:Pointer; dwNumberOfBytesToRead:Cardinal; lpdwNumberOfBytesRead:Cardinal ):BOOLEAN; Параметры hFile hFile- описатель файла, полученный от вызова InternetOpenUrl, FtpOpenFile, GopherOpenFile, или HttpOpenRequest lpBuffer Адрес буфера, в который записываются полученные данные dwNumberOfBytesToRead Количество байт, которые следует прочитать lpdwNumberOfBytesRead Количество реально прочитанных байт. Это значение будет установлено в 0 перед работой, или проверкой ошибок Возвращает TRUE при успешном завершении и FALSE в противном случае. Информация об ошибках передачи может быть получена от InternetGetLastResponseInfo Замечания Если значение функции TRUE и количество прочитанных байт 0, то передача файла успешно завершена(достигнут конец файла) InternetSetFilePointer Устанавливает точку чтения для InternetReadFile. Возможно, сервер не поддерживает возможность. InternetSetFilePointer( hFile:hInternet; lDistanceToMove:Integer; pReserved:Pointer; dwMoveMethod:Cardinal; dwContext:Cardinal ):Integer; Параметры hFile Описатель файла, полученный от вызова InternetOpenUrl (для HTTP,или HTTPS URL) или HttpOpenRequest (метод GET или HEAD). Описатель не должен быть создан со флагом INTERNET_FLAG_DONT_CACHE или INTERNET_FLAG_NO_CACHE_WRITE lDistanceToMove Значение, содержащее число байтов для передвижения файлового указателя. Положительное число означает передвижение вперед, отрицательное- назад. pReserved Зарезвировано. Установите в nil dwMoveMethod Параметр, указывающий способ перемещения. Возможно одно из следующих значений: FILE_BEGIN Начальная точка- начало файла. Если установлен FILE_BEGIN, то lDistanceToMove интерпретируется, как положение новой точки чтения от начала. Замечания Функция не может быть использована, если достигнут конец файла функцией InternetReadFile. Правильная работа функции не гарантирована, если размер файла не может быть определен. Для нас эта функция нужна, чтобы использовать возможность возобновления скачивания файлов. Для получения текста ошибки будем использовать следующую функцию: function GetErrorText(const FromServer: BOOLEAN): string; А теперь простейший пример закачки файла с сервера По кнопке Button1 происходит закачка. В Edit1 содержится URL файла без префикса http:// procedure TForm1.Button1Click(Sender: TObject); if SaveDialog1.Execute then Session := InternetOpen('IExplorer', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, if Session = nil then URL := InternetOpenURL(Session, PChar('http://' + Edit1.Text), nil, 0, 0, R := 0; try if not Fail then InternetCloseHandle(URL); |
|||||||||||||||||||
|