Популярные статьи
|
|
|
|
|
Сейчас на сайте
|
|
Гостей: 1
На сайте нет зарегистрированных пользователей
Пользователей: 1,182
новичок: altynay
|
|
|
Реклама
|
|
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
|
|
| Полезная информация о работе с интернет, модемом, и т. д. |
Для
начала, рассмотрим функции, необходимые для работы:
Dial-Up
InternetAutodial
Как сказано на msdk, "Causes the
modem to automatically dial the default Internet connection", у меня
просто вызывал диалог подключения
InternetAutodial( dwFlags:Cardinal;
hwndParent:hWnd ):BOOLEAN;
Параметры
dwFlags
Параметры операции. Принимает следующие значения:
|
INTERNET_AUTODIAL_FAILIFSECURITYCHECK |
|
INTERNET_AUTODIAL_FORCE_ONLINE |
|
INTERNET_AUTODIAL_FORCE_UNATTENDED |
hwndParent
Handle окна Возвращает TRUE при успешном результате, FALSE в
противном случае.
InternetAutodialHangup
Отсоединяет модем от линии.
InternetAutodialHangup(
dwReserved:Cardinal ):BOOLEAN;
Параметры
dwReserved
Зарезервировано. Должно быть 0. Возвращает TRUE при успешном
результате, FALSE в противном случае.
InternetGetConnectedState
Возвращает состояние соединения
InternetGetConnectedState(
var lpdwFlags:Cardinal; dwReserved:Cardinal ):BOOLEAN;
Параметры
lpdwFlags
Свойства соединения. Флаги:
|
INTERNET_CONNECTION_CONFIGURED |
| INTERNET_CONNECTION_LAN
|
| INTERNET_CONNECTION_MODEM
|
|
INTERNET_CONNECTION_MODEM_BUSY |
|
INTERNET_CONNECTION_OFFLINE |
| INTERNET_CONNECTION_PROXY
|
| INTERNET_RAS_INSTALLED
|
dwReserved
Зарезервировано. Должно быть 0. Возвращает TRUE при успешном
результате, FALSE в противном случае.
Работа с интернет
InternetOpen
Инициализирует соединение с
интернет. InternetOpen(
lpszAgent:PChar; dwAccessType:Cardinal; lpszProxyName:PChar;
lpszProxyBypass:PChar; dwFlags:Cardinal ):hInternet;
Параметры
lpszAgent
строка символов, которая передается серверу и сообщает ему название
программы, пославшей запрос dwAccessType Параметры
доступа. Принимает следующие значения:
| INTERNET_OPEN_TYPE_DIRECT |
обрабатывает локально
имена host'ов |
|
INTERNET_OPEN_TYPE_PRECONFIG |
параметры берутся из
реестра |
|
INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY |
параметры также берутся из
реестра и предотвращает запуск JScript и Internet Setup
(INS) файлов |
| INTERNET_OPEN_TYPE_PROXY |
использовать указанный
прокси лист, если не получилось, то используется
INTERNET_OPEN_TYPE_DIRECT (прямое соединение с сервером) |
lpszProxyName
Указатель на строку, содержащую адрес прокси сервера, или их лист.
Используется только если есть параметр INTERNET_OPEN_TYPE_PROXY.
lpszProxyBypass Указатель на строку содержащей host'ы,
или IP адреса, с которыми не должен использоваться прокси сервер
dwFlags Параметр- флаги, влияющие на поведение функции.
Возможны комбинации констант:
| INTERNET_FLAG_ASYNC
|
| INTERNET_FLAG_FROM_CACHE
|
| INTERNET_FLAG_OFFLINE
|
Возвращает описатель, который
позволяет использовать интернет функции в Вашей программе.
Полученный описатель должен быть освобожден после спользования
функций с помощью InternetCloseHandle. Вы можете несколько раз
вызывать эту функцию в своей программе, но все они должны быть
освобождены после(например, для разных прокси серверов). Если
функция не успешна, то возвращается nil.
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_DEFAULT_GOPHER_PORT |
Стандартный порт для
Gopher сервера (порт 70) |
| INTERNET_DEFAULT_HTTP_PORT |
Стандартный порт для HTTP
сервера (порт 80) |
|
INTERNET_DEFAULT_HTTPS_PORT |
Стандартный порт для HTTPS
сервера (порт 443) |
|
INTERNET_DEFAULT_SOCKS_PORT |
Стандартный порт для SOCKS
firewall сервера (порт 1080) |
|
INTERNET_INVALID_PORT_NUMBER |
Использовать стандартный
порт, для службы определенной параметром dwService. |
lpszUsername
Указатель на строку, содержащую имя пользователя lpszPassword
Указатель на строку, содержащую пароль dwService Тип
сервиса
| INTERNET_SERVICE_FTP |
FTP сервис |
| INTERNET_SERVICE_GOPHER |
Gopher сервис |
| INTERNET_SERVICE_HTTP |
HTTP сервис |
dwFlags
Специальные параметры для соединения. dwContext
Установите в 0. Возвращает описатель соединения с сервисом если
соединение прошло успешно, nil в противном случае Таблица описывает
поведение для 4 возможных установок параметров lpszUsername и
lpszPassword
| lpszUsername |
lpszPassword |
Имя пользователя,
отсылаемого на FTP сервер |
Пароль, отсылаемый на
FTP сервер |
| nil |
nil |
"anonymous" |
E-mail пользователя |
| Не нулевая строка |
nil |
lpszUsername |
"" |
| nil |
Не нулевая строка |
Ошибка |
Ошибка |
| Не нулевая строка |
Не нулевая строка |
lpszUsername |
lpszPassword |
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 |
| INTERNET_FLAG_HYPERLINK
|
|
INTERNET_FLAG_IGNORE_CERT_CN_INVALID |
|
INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |
|
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP |
|
INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS |
|
INTERNET_FLAG_KEEP_CONNECTION |
| INTERNET_FLAG_NEED_FILE
|
| INTERNET_FLAG_NO_AUTH
|
|
INTERNET_FLAG_NO_AUTO_REDIRECT |
|
INTERNET_FLAG_NO_CACHE_WRITE |
| INTERNET_FLAG_NO_COOKIES
|
| INTERNET_FLAG_NO_UI
|
| INTERNET_FLAG_PASSIVE
|
|
INTERNET_FLAG_PRAGMA_NOCACHE |
| INTERNET_FLAG_RAW_DATA
|
| INTERNET_FLAG_RELOAD
|
|
INTERNET_FLAG_RESYNCHRONIZE |
| INTERNET_FLAG_SECURE
|
dwContext
Установите в 0 Возвращает описатель для FTP, Gopher, или HTTP ссылки
если все прошло успешно, или nil в противном случае Чтобы узнать,
почему сервер не дал доступа, вызовите InternetGetLastResponseInfo.
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
интерпретируется, как положение новой точки чтения от
начала. |
| FILE_CURRENT |
Текущая точка чтения-
точка начала. |
| FILE_END |
Начальная точка- конец
файла. Если размер файла не известен, то метод не работает |
dwContext
Зарезервировано. Установите в 0. При успешном выполнении возвращает
текущую позицию(от начала) точки чтения, в противном случае
возаращает -1.
Замечания
Функция не может быть
использована, если достигнут конец файла функцией InternetReadFile.
Правильная работа функции не гарантирована, если размер файла не
может быть определен. Для нас эта функция нужна, чтобы использовать
возможность возобновления скачивания файлов.
Для получения текста ошибки будем
использовать следующую функцию:
Function GetErrorText(const
FromServer:BOOLEAN):String;
Var Msg:Array[0..1023]of Char;
ErCode,Len:Cardinal;
begin
Len:=1023;
ZeroMemory(@Msg,SizeOf(Msg));
if FromServer
then
if InternetGetLastResponseInfo(ErCode,@Msg,Len)
then Result:='На сервере произошла ошибка
#'+IntToStr(ErCode)+#13''''+StrPas(@msg)+''''
else Result:='Не могу получить описание ошибки'
else
if FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,
nil,GetLastError,
GetKeyboardLayout(0),
@Msg,1023,nil)<>0
then Result:=StrPas(@Msg)
else Result:='Не могу получить описание ошибки';
end;
Если параметр FromServer
TRUE, то код ошибки и её текст берется с сервера, в противном случае
берется текст локальной ошибки.
А теперь простейший пример закачки файла с
сервера По кнопке Button1 происходит закачка. В Edit1 содержится URL
файла без префикса http://
procedure
TForm1.Button1Click(Sender: TObject);
Var
Session,URL:hInternet;
F:TFileStream;
Q,Fail:BOOLEAN;
Buf:Array[1..8192]of Byte;
R:Cardinal;
begin
Fail:=FALSE;
if SaveDialog1.Execute
then
begin
F:=TFileStream.Create(SaveDialog1.FileName,fmCreate);
Session:=InternetOpen('IExplorer',INTERNET_OPEN_TYPE_PRECONFIG,nil,nil,0);
if Session=nil
then begin
MessageDlg('Error, InternetOpen: Соединение не может быть
установлено',
mtError,[mbOK],0);
exit;
end;
URL:=InternetOpenURL(Session,PChar('http://'+Edit1.Text),nil,0,0,0);
if URL=nil
then
begin
MessageDlg('Error, InternetOpenURL: Ссылка не может быть открыта!',
mtError,[mbOK],0);
InternetCloseHandle(Session);
exit;
end;
R:=0;
try
Repeat
Q:=InternetReadFile(URL,@Buf,8192,R);
F.Write(Buf,R);
until Q and(R=0)
except
MessageDlg('Error, не могу прочитать файл.'#13+GetErrorText(TRUE),
mtError,[mbOK],0);
InternetCloseHandle(Session);
InternetCloseHandle(URL);
Fail:=TRUE;
end;
if not Fail
then ShowMessage('Файл успешно скачен.');
InternetCloseHandle(URL);
InternetCloseHandle(Session);
F.Free;
end;
end;
Вот, собственно, и все. Желаю
удачи!
|
Опубликовал Kest
Октябрь 25 2008 15:31:32 ·
0 Комментариев ·
1625 Прочтений ·
|
|
Комментарии
|
|
Нет комментариев.
|
|
Добавить комментарий
|
|
|
|
Рейтинги
|
|
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
|
|
|
Гость
|
|
|
|
|
Загрузки
|
|
|
Новые загрузки
Случайные загрузки
Топ загрузок
|
|
|