Поделиться через


Настройка и получение параметров Интернета

В этом разделе описывается, как устанавливать и получать параметры Интернета с помощью функций InternetSetOptionи InternetQueryOption .

Параметры Интернета можно установить или извлечь из указанного дескриптора HINTERNET или текущих настроек в Microsoft Internet Explorer.

Шаги реализации

Чтобы задать или получить параметры Интернета, выполните указанные ниже действия.

Выбор параметров браузера

Так как есть так много вариантов Интернета, выбор правильных вариантов важен. Многие параметры Интернета влияют на поведение функций WinINet и Internet Explorer:

Например, можно:

  • Управление базовой аутентификацией сервера и прокси-сервера путем установки имен пользователей и паролей.
  • Задайте или получите строку агента пользователя, используемую серверами для идентификации функций клиентского приложения или браузера.
  • Определите тип указанного дескриптора HINTERNET.

Для получения дополнительных сведений и списка параметров Интернета см. раздел флаги параметров.

В Internet Explorer 5 и более поздних версиях некоторые параметры можно задать или извлечь из определенного подключения к Интернету с помощью INTERNET_PER_CONN_OPTION_LIST и структур INTERNET_PER_CONN_OPTION. Дополнительные сведения и список параметров, которые можно задать или извлечь из определенного подключения к Интернету, см. в разделе dwOptions член структуры INTERNET_PER_CONN_OPTION.

Выбор дескриптора HINTERNET

ДескрипторHINTERNET, используемый для задания или извлечения параметров Интернета, определяет область операции. Все дескриптора, созданные с помощью этого дескриптора, наследуют параметры, заданные для этого дескриптора.

Например, клиентские приложения, требующие прокси-сервера с проверкой подлинности, вероятно, не требуют настройки имени и пароля прокси-сервера каждый раз, когда приложение пытается получить доступ к интернет-ресурсу. Если все запросы на заданное подключение обрабатываются одним и тем же прокси-сервером, при задании имени пользователя и пароля на типе подключения HINTERNET, то есть обработчике, созданном вызовом InternetConnect, это позволит любым вызовам, производным от этого HINTERNET, использовать то же имя и пароль прокси-сервера. Настройка имени пользователя и пароля прокси-сервера при каждом создании дескриптора HINTERNET с помощью HttpOpenRequest приведет к дополнительным и ненужным затратам ресурсов. Помните, что если приложение использует прокси-сервер, требующий проверки подлинности, он должен задать учетные данные прокси-сервера для каждого нового подключения.

Настройка или извлечение параметров

Если вы определили, какие параметры Интернета и HINTERNET вы будете использовать, извлеките эти параметры Интернета. Чтобы задать или получить параметры, вызовите InternetQueryOption или InternetSetOption.

Область действия дескриптора HINTERNET

Дескриптор HINTERNET, используемый для задания или получения параметров Интернета, определяет действия, для которых допустимы параметры.

Эти ручки имеют три уровня.

  • Корневой HINTERNET дескриптор (созданный вызовом InternetOpen) будет содержать все параметры Интернета, влияющие на этот экземпляр WinINet.
  • HINTERNET обрабатывает подключение к серверу (созданное вызовом InternetConnect)
  • HINTERNET управляет связями с ресурсом или перечислением ресурсов на определенном сервере.

Помимо различных дескрипторовHINTERNET, приложение также может использовать NULL для задания или получения значений по умолчанию параметров Интернета, используемых Internet Explorer и функциями WinINet. Настройка параметров Интернета при использовании NULL в качестве дескриптора изменяет значения параметров по умолчанию, которые в настоящее время хранятся в реестре. Клиентские приложения не должны использовать функции реестра для изменения значений по умолчанию параметров Интернета, так как реализация способа хранения параметров может быть изменена в будущем.

В следующей таблице перечислены типы дескрипторов HINTERNET и области параметров Интернета, связанных с ними.

Тип хэндла Размах
NULL Настройки параметров по умолчанию для Internet Explorer.
INTERNET_HANDLE_TYPE_CONNECT_FTP Настройки параметров для этого подключения к FTP-серверу. Эти параметры влияют на любые операции, инициированные этим дескриптором HINTERNET, например загрузки файлов.
INTERNET_HANDLE_TYPE_CONNECT_GOPHER Настройки параметров для подключения к серверу Gopher. Эти параметры влияют на любые операции, инициированные этим дескриптором HINTERNET, например загрузки файлов. Примечание. Windows XP и Windows Server 2003 R2 и более ранние только.
INTERNET_HANDLE_TYPE_CONNECT_HTTP Настройки для этого подключения к HTTP-серверу. Эти параметры влияют на любые операции, инициированные этим дескриптором HINTERNET, например загрузки файлов.
INTERNET_HANDLE_TYPE_FILE_REQUEST Настройки параметров, связанные с этим запросом файла.
INTERNET_HANDLE_TYPE_FTP_FILE Настройки, связанные с этим скачиванием ресурса FTP.
INTERNET_HANDLE_TYPE_FTP_FILE_HTML Настройки параметров, связанные с этим ресурсом FTP, загружаются в формате HTML.
Тип дескриптора Интернет: FTP_НАЙТИ Настройки, связанные с этим поиском файлов на FTP-сервере.
INTERNET_HANDLE_TYPE_FTP_NАЙТИ_HTML Параметры, связанные с этим поиском файлов на FTP-сервере, форматированы в HTML.
ТИП_ИНТЕРНЕТ_ОБРАБОТКИ_GOPHER_ФАЙЛА Параметры, связанные со скачиванием этого ресурса Gopher. Примечание. Только Windows XP и Windows Server 2003 R2 и более ранние версии.
ТИП_ХЭНДЛА_ИНТЕРНЕТА_GOPHER_ФАЙЛ_HTML Настройки параметров, связанные с данным ресурсом Gopher, загружены в формате HTML. Примечание. Только Windows XP и Windows Server 2003 R2 и ранее.
INTERNET_HANDLE_TYPE_GOPHER_FIND Параметры, связанные с этим поиском файлов на сервере Gopher. Примечание. Только Windows XP и Windows Server 2003 R2 и более ранние версии.
INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML Параметры, связанные с этим поиском файлов на сервере Gopher в формате HTML. Примечание. Только Windows XP и Windows Server 2003 R2 и более ранние версии.
Тип_интернета_HTTP_запрос Опции, связанные с этим HTTP-запросом.
INTERNET_HANDLE_TYPE_INTERNET Параметры, связанные с этим экземпляром функций WinINet.

Настройка отдельных параметров

После определения параметров Интернета, которые вы хотите задать, и области, которую вы хотите затронуть этими параметрами, настройка параметров Интернета не является сложной. Все, что необходимо сделать, — это вызвать функцию InternetSetOption с нужным дескриптором HINTERNET, флагом параметров Интернета и буфером, содержащим информацию, которую вы хотите установить.

В следующем примере показано, как задать имя и пароль прокси-пользователя в указанном дескрипторе HINTERNET.

// strUsername is a string buffer of cchMax characters or less.
// It contains the proxy user name.
size_t cchMax = 80;
size_t cchUserLength, cchPasswordLength;
HRESULT hr = StringCchLength(strUsername, cchMax, &cchUserLength);

if (SUCCEEDED(hr))
{
   // hOpen is the HINTERNET handle created by InternetConnect.
   InternetSetOption(hConnect, INTERNET_OPTION_PROXY_USERNAME,
      strUsername, DWORD(cchUserLength)+1);
}
else
{
   // Insert error handling code here.
}

// strPassword is the string buffer that contains the proxy password.
hr = StringCchLength(strPassword, cchMax, &cchPasswordLength);

InternetSetOption(hOpen, INTERNET_OPTION_PROXY_PASSWORD,
    strPassword, DWORD(cchPasswordLength)+1);

Получение отдельных параметров

Параметры Интернета можно получить с помощью функции InternetQueryOption. Чтобы получить настройки интернета, выполните следующие действия.

  1. Определите размер буфера, необходимый для получения сведений о параметрах Интернета.

    Размер буфера можно определить, используя NULL для адреса буфера и передав ему размер буфера, равный нулю.

    DWORD dwSize;
    InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);
    

    Значение, возвращаемое InternetQueryOption, — это объем памяти, необходимый для получения информации в байтах.

  2. Выделите память для буфера.

    char *lpszData;
    lpszData = new char[dwSize];
    
  3. Получение данных.

    InternetQueryOption( NULL, 
                         INTERNET_OPTION_USER_AGENT,
                         lpszData, &dwSize );
    
  4. Освободить память.

    delete [] lpszData;
    

Полный пример

Ниже приведен полный пример, используемый в предыдущем разделе. В этом примере показано, как получить строку агента пользователя по умолчанию.

// This call determines the required buffer size.
DWORD dwSize;
InternetQueryOption(NULL, INTERNET_OPTION_USER_AGENT, NULL, &dwSize);

// Allocate the necessary memory.
char *lpszData;
lpszData = new char[dwSize];

// Call InternetQueryOption again with the provided buffer.
InternetQueryOption( NULL, 
                     INTERNET_OPTION_USER_AGENT,
                     lpszData, &dwSize );

// Insert code here to use the user agent string data.

// Free the allocated memory.
delete [] lpszData;

Настройка параметров подключения

В Internet Explorer 5 и более поздних версиях параметры Интернета можно задать для определенного подключения. Ранее все подключения использовали одни и те же параметры Интернета. Чтобы задать параметры для определенного подключения, выполните следующие действия.

  1. Создайте структуру INTERNET_PER_CONN_OPTION_LIST.
  2. Выделите память для отдельных параметров Интернета, которые необходимо задать для подключения.
  3. Задайте параметры в структурах INTERNET_PER_CONN_OPTION.
  4. Задайте параметры с помощью InternetSetOption.

В следующем примере кода показано, как задать прокси-данные для подключения к локальной сети.

BOOL SetConnectionOptions()
{
    INTERNET_PER_CONN_OPTION_LIST list;
    BOOL    bReturn;
    DWORD   dwBufSize = sizeof(list);

    // Fill the list structure.
    list.dwSize = sizeof(list);

    // NULL == LAN, otherwise connectoid name.
    list.pszConnection = NULL;

    // Set three options.
    list.dwOptionCount = 3;
    list.pOptions = new INTERNET_PER_CONN_OPTION[3];

    // Ensure that the memory was allocated.
    if(NULL == list.pOptions)
    {
        // Return FALSE if the memory wasn't allocated.
        return FALSE;
    }

    // Set flags.
    list.pOptions[0].dwOption = INTERNET_PER_CONN_FLAGS;
    list.pOptions[0].Value.dwValue = PROXY_TYPE_DIRECT |
        PROXY_TYPE_PROXY;

    // Set proxy name.
    list.pOptions[1].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
    list.pOptions[1].Value.pszValue = TEXT("https://proxy:80");

    // Set proxy override.
    list.pOptions[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
    list.pOptions[2].Value.pszValue = TEXT("local");

    // Set the options on the connection.
    bReturn = InternetSetOption(NULL,
        INTERNET_OPTION_PER_CONNECTION_OPTION, &list, dwBufSize);

    // Free the allocated memory.
    delete [] list.pOptions;

    return bReturn;
}

Получение параметров подключения

В Internet Explorer 5 и более поздних версиях параметры Интернета можно получить из определенного подключения. Чтобы получить параметры из определенного подключения, выполните следующие действия.

  1. Создайте структуру INTERNET_PER_CONN_OPTION_LIST.
  2. Выделите память для отдельных параметров интернета, которые нужно извлечь из подключения.
  3. Укажите параметры с помощью структур INTERNET_PER_CONN_OPTION.
  4. Извлеките параметры с помощью InternetQueryOption.
  5. Используйте данные опции.
  6. Освободить память, выделенную для хранения данных параметра, с помощью функции GlobalFree.

Заметка

WinINet не поддерживает реализации сервера. Кроме того, его не следует использовать в рамках сервиса. Для реализации серверов или служб используйте Microsoft Windows HTTP Services (WinHTTP).

обработка проверки подлинности

дескрипторы HINTERNET