Разработка приложений для Internet

       

Конструктор класса CInternetSession


Конструктор класса CInternetSession имеет следующий прототип:

CInternetSession(

   LPCTSTR pstrAgent = NULL,

   DWORD dwContext = 1,

   DWORD dwAccessType = PRE_CONFIG_INTERNET_ACCESS,

   LPCTSTR pstrProxyName = NULL,

   LPCTSTR pstrProxyBypass = NULL,

   DWORD dwFlags = 0

);

Посмотрите, как определен конструктор класса CInternetSession в исходных текстах библиотеки MFC. Вы найдете соответствующий программный код в файле Inet.cpp.

Конструктор класса CInternetSession вызывает единственную функцию программного интерфейса WinInet - InternetOpen, которая выполняет инициализацию WinInet.

Параметры конструктора класса CInternetSession передаются непосредственно функции InternetOpen:

m_dwContext = dwContext;



if (pstrAgent == NULL)

   pstrAgent = AfxGetAppName();

m_hSession = InternetOpen(pstrAgent, dwAccessType,

   pstrProxyName, pstrProxyBypass, dwFlags);

Вернемся теперь к обсуждению параметров конструктора. Все параметры конструктора класса CInternetSession являются необязательными и при создании объекта данного класса вы их можете не указывать.

Через параметр pstrAgent можно явным образом указать название приложения, или программного модуля, работающего с WinInet. Это название используется протоколом HTTP, и передается серверу в качестве имени пользовательского агента.

Если вызвать конструктор класса CInternetSession без параметров или указать в качестве параметра pstrAgent значение NULL, то конструктор самостоятельно определит имя приложения. Для этого конструктор использует глобальную функцию AfxGetAppName (см. фрагмент из файла Inet.cpp представленный выше).

Параметр dwContext определяет идентификатор контекста. Созданный объект будет ассоциироваться с данным идентификатором контекста.

Параметр dwAccessType определяет тип доступа к сети. Можно использовать одно из значений, перечисленных в следующей таблице:

Константа

Тип доступа

INTERNET_OPEN_TYPE_PRECONFIG

Используется тип доступа, указанный в регистрационной базе Windows

INTERNET_OPEN_TYPE_DIRECT

Прямой доступ к Internet

INTERNET_OPEN_TYPE_PROXY

Доступ через proxy сервер

<


Откройте Control Panel и выберите приложение Internet, которое предназначено для настройки различных параметров доступа к сети Internet

На экране появится диалоговая панель Internet Properties, состоящая из нескольких страниц (рис. 1.2). Выберите страницу Connection, отвечающую за подключение к Internet.



Рис. 1.2. Диалоговая панель Internet Properties

Если включен переключатель Connect to the Internet as needed в группе Dialing, значит ваш компьютер подключается к сети через модем с использованием Dial-Up Networking. Если включен переключатель Connect through a proxy server, значит вы подключены к сети через специальный proxy сервер. Настройки этого сервера вы можете просмотреть, нажав кнопку Setting. В случае, если оба эти переключателя отключены, значит вы подключены к сети напрямую.

Константы PRE_CONFIG_INTERNET_ACCESS и INTERNET_OPEN_TYPE_PRECONFIG определены в файле wininet.h. Ниже мы привели соответствующий фрагмент этого файла:

//

// access types for InternetOpen()

//

#define INTERNET_OPEN_TYPE_PRECONFIG   0   // use registry configuration

#define INTERNET_OPEN_TYPE_DIRECT      1   // direct to net

#define INTERNET_OPEN_TYPE_PROXY       3   // via named proxy

#define PRE_CONFIG_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PRECONFIG

#define LOCAL_INTERNET_ACCESS       INTERNET_OPEN_TYPE_DIRECT

#define GATEWAY_INTERNET_ACCESS     2   // Internet via gateway

#define CERN_PROXY_INTERNET_ACCESS  INTERNET_OPEN_TYPE_PROXY

Как видите, значения констант PRE_CONFIG_INTERNET_ACCESS и INTERNET_OPEN_TYPE_PRECONFIG полностью совпадают.

Если тип доступа, определен параметром dwAccessType как INTERNET_OPEN_TYPE_PROXY, то через параметр pstrProxyName следует указать имя proxy сервера, а через параметр pstrProxyBypass - указатель на строку со списком адресов дополнительных серверов. Вы можете указать в качестве параметра pstrProxyBypass значение NULL. При этом список серверов будет взят из регистрационной базы данных Windows.

Если используются другие типы доступа, то в качестве параметра dwAccessType надо указать значение NULL. Параметр pstrProxyBypass в этом случае значения не имеет.



Последний параметр конструктора dwFlags определяет различные характеристики, перечисленные в следующей таблице:

Константа

Описание

INTERNET_FLAG_DONT_CACHE

Данные, получаемые WinInet из сети кэшируются в специальном каталоге на жестком диске локального компьютера. В случае если пользователь часто запрашивает у WinInet одни и те же файлы, то для ускорения они могут браться не из сети, а из кэша. Константа INTERNET_FLAG_DONT_CACHE запрещает кэшировть принимаемые данные

INTERNET_FLAG_ASYNC

Устанавливает асинхронный режим работы WinInet. Последующие операции с объектом могут завершится с ошибкой ERROR_IO_PENDING. Когда операция закончится, функция обратного вызова, будет вызвана с кодом INTERNET_STATUS_REQUEST_COMPLETE

INTERNET_FLAG_OFFLINE

Операции по загрузке информации выполняются только из кэша. В том случае, если запрашиваемая информация в кэше отсутствует, возвращается ошибка

Если соединение не может быть открыто, то конструктор класса CInternetSession вызывает исключение CInternetException с помощью глобальной функции AfxThrowInternetException. Мы расскажем о классе CInternetException, его методах и функции AfxThrowInternetException в разделе “Класс CInternetException”.


Содержание раздела